Diskuze: dynamicke pole ukazatelu
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 16 zpráv z 16.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Pouzil bych treba Vector:
http://msdn.microsoft.com/…s.71%29.aspx
pogoogli po nejake ukazce, treba tady z toho by to snad mohlo byt trochu
poznat:
http://www.mochima.com/…vectors.html
nebo
http://www.codeguru.com/…r-Part-1.htm
Samozrejme, v C++ muzes mit ukazatel na cokoliv, dela se uplne stejne, jako
jakykoliv jiny ukazatel
Ukazatel na Vector tříd:
Vector<NejakaTrida>* mujVector;
Vector ukazatelů na třídu:
Vector<NejakaTrida*> mujVector;
Ukazatel na Vector ukazatelů na třídu:
Vector<NejakaTrida*>* mujVector;
A samozřejmě musíš ten Vector pak ještě vytvořit
void fce()
{
...
}
vector<void(*)()> vect;
vect.push_back(fce);
Ale moc se mi to nezda, neslo by to resit jednoduseji?
edit:
no potrebuju nekam "registrovat" fce nove vytvorenejch trid...
kazda trida ma fci draw a step (draw je vykreslovani a step je cyklus treba pro pohyb)
no a ja je potrebuju volat. jen nevim jak jinak bych je mohl volat nez
takhle... tezko se to vysvetluje
A sedi ti pocet a typy argumentu a typ navratove hodnoty?
Prehlednejsi a jednodussi reseni je mit ve Vectoru misto funkci primo ty vytvorene tridy.
Spis si tam nahazej ty tridy a pak je cyklem projed a pospoustej ty jejich fce.
Pointer na členskou funkci třídy musíš vždycky používat s instancí tý třídy. Stejně tak musíš dát kompilátoru vědět do který třídy funkce na kterou pointer ukazuje patří. "vector<void( * )()> initfce;" je deklarace vektoru pointerů na obecnou funkci. Pokud chceš vektor pointerů na členskou funkci třídy live, musíš to deklarovat takhle "vector<void(live:: * )()> initfce;". Když pak funkci přes pointer voláš, musíš použít konkrétní instanci třídy live "(instance.*initfce[index])();". Při přiřazování adresy musíš použít adresní operátor & "initfce.push_back(&live::ResetLive);". Nejsem si jistej jestli je to všechno naprosto syntakticky správně, ale tušim že by mělo. Každopádně, pokud to nutně nepotřebuješ, tak doporučuju se tomu vyhnout.
Zobrazeno 16 zpráv z 16.