C++ osztálysablon részleges specifikálása alapértelmezett paraméterekkel?
Van egy sablonom, amit meg kellene írnom pointerekre és nem pointerekre is. Ha van benne pointer, akkor lehet 1 vagy 2 paramétere is, ha nincs benne pointer, akkor szigorúan 1 pointeres. Ha pointer van benne, akkor azért lehet 1 vagy 2 paramétere, mert a 2. paramétere alapértelmezett (default), std::vector. A helyzetet nehezíti, hogy a készítendő osztály örököl a második paraméterül kapott osztálytól is.
Addig eljutottam már, hogy hogy kellene úgy megoldani, hogy ha mindkettőnek csak 1-1 paramétere lenne:
template <typename T>
class Class: public std::vector<T>{
//... itt a nem pointeres rész kifejtése
}
template <typename T>
class Class<T*>: public std::vector<T*>{
//...itt a pointeres rész kifejtése
}
Természetesen úgy is menne, ha a valamelyiket kellene kétparaméteresre alakítani. Hogy kellene, hogy a kívánt módon is működjön?
Előre is köszönöm!
Nem vagyok benne biztos hogy az külön-külön működik.
De nem is értem, miért kellene külön. Ha jól látom, te le akarsz származtatni a vector-ból mindenképp, annak megfelelően, hogy mire hívták meg.Ebben az esetben nem kell pointeres változat.
Ha írsz egy ilyet:
template <typename T>
class SajatTomb: public std::vector<T>
Akkor azt ha így hozod létre: SajatTomb<int> akkor az std::vector<int> lesz az őse, míg ha pointert adsz neki, az is típusnak minősül:
ha SajatTomb<int*>
akkor az std::vector<int*> lesz az őse. Ha bármilyen okból külön kéne kezelned az eseteket, akkor az egész tervezési hibás. Az a lényege a generikus osztálynak, hogy mindenféle típussal működjön néhány esetet leszámítva. Neked szinte biztos hogy nem úgy kéne kezelned.
Egyéb megjegyzések: osztálynak ne add azt a nevet, hogy Class, mert zavaró, és ütközést is okozhat beépített típussal.
Ezen felül:
template <typename T>
class Class<T*>: public std::vector<T*>
Ilyen tudomásom szerint nem létezik. Ha mégis, akkor úgy összekavarodik, hogy nagyon. Ha T-re hívod meg, akkor miért T* a class. De biztos, hogy nem működik, mert a fordító nem tudja megkülönböztetni szerintem szabályosan, hogy melyik típusra melyik igaz, mert a változóra/függvényre mutató pointer is típus. Adsz neki int*-ot. Mit tegyen? Az int* típus, így T template-paraméterre meghívja. De akkor mi van a T*-gal? Szerintem ilyen nyelvi elem nem létezik.
De ha nagyon ragaszkodsz hozzá, hogy neked külön kéne valami pointeres, akkor írd le mit készítesz, miért kell külön, esetleg privátban.
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!