C++-ban hogyan lehet (ha lehetséges) void függvényfejben típusra hivatkozni?
Van egy típusom. TTipus {string a; string b; int c; int d;};
Van egy ilyen típusó tömböm. TTipus TOMB[100];
Void függvénnyel szeretnék beolvastatni. Hogyan tudok a függvényfejben hivatkozni az összetevőkre? Van-e jobb megoldás, mint az, hogy
void szovegbeolvasas(TTipus TOMB[],string q);
void szambeolvasas(TTipus TOMB[],string q);
int main(){TTipus TOMB[100]; szovegbeolvasas(TOMB,a); szovegbeolvasas(TOMB,b); szambeolvasas(TOMB,c); szambeolvasas(TOMB,d);}
szovegbeolvasas(TTipus TOMB[],string q){
for (int i=0;i<100;++i){cin >> TOMB[i].q;return;}
szambeolvasas(TTipus TOMB[],string q){
for (int i=0;i<100;++i){cin >> TOMB[i].q;return;}
Lehetséges, hogy egyből csak egy oszlopra hivatkozzak a void függvényfejben?
Ez így elég meredek. A C nem script nyelv, nem tudsz egy struktúra adattagjára stringgel hivatkozni.
A mainben meg sem adtad, hogy mi az a, b, c, d változód típusa v. értéke. Azért mert leírod még nem lesz belőle string.
Én egy függvényt írnék, ami várja a tömböt és egy 0-4 értéket.
A függvényen belül ha 0-át kapok, akkor a tömb elemének a tagját olvasom be, ha 1-et, akkor a b tagját... ha 3-at, akkor a d tagját.
Template-ekkel tökéletesen meg lehet oldani, és így nem a középsulis else-if megoldást kell használnod.
template <int C>
void readColumn(TTipus* pTomb);
template <>
void readColumn<0>(TTipus* pTomb, int len)
{
for (int i = 0; i < len; i++)
{
cin >> pTomb[i].a;
}
}
template <>
void readColumn<1>(TTipus* pTomb, int len)
{
for (int i = 0; i < len; i++)
{
cin >> pTomb[i].b;
}
}
Ez kódban így néz ki:
int main()
{
TTipus tomb[100];
readColumn<0>((TTipus*) tomb, 100);
readColumn<1>((TTipus*) tomb, 100);
// ...
return 0;
}
#3, biztos, hogy jó a template-es játék?
Ha a TTipust egy adatbázis rekordnak veszünk, akkor a TTipus[] egy táblázat. A paraméterként adott azonosító, kijelöli, hogy a táblázat melyik oszlopát akarod tölteni.
Ez jó dolog template-tel megcsinálni?
Ez a templates megoldás is ugyanolyan szörnyű és tele van kódismétléssel.
Ha egy adatstruktúrának az oszlopait nem egyszerre olvasod be, akkor csinálj nekik külön függvényeket, vagy eleve a struktúrádat bontsd szét.
Tengor válasza a legkiválóbb. Egy eljárás - bocs c: függvény - és a kapott paraméter alapján a megfelelő oszlopot írja. Nem 'középsulis else-if megoldást kell használnod' persze van, kell egy case szerkezet.
Könyörgöm, hagyatkozzunk már a józan paraszti észre és ne a bal kezünkkel vakarjuk a jobb fülünket orrpiszkálás közben.
Tengorral én is egyet értek.
Érdemes eleve oszloponként tárolni az adatokat, így a cache miss esélye is kisebb, tehát performancia téren is jobb lesz a program. nem beszélve arról, hogy bekerülhet egy (hash) map-ba tehát stringként is tudunk rá hivatkozni.
Az én template megoldásom a kérdező kérdésre vonatkozott, kifejezetten erre a célra. Egyértelmű, hogy a template-ek nem erre valóak, még a TMP se.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!