Kezdőoldal » Számítástechnika » Programozás » C++ osztálysablon részleges...

C++ osztálysablon részleges specifikálása alapértelmezett paraméterekkel?

Figyelt kérdés

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!



2020. máj. 22. 21:09
 1/1 anonim ***** válasza:
79%

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.

2020. máj. 22. 23:40
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!