Posted By: TopGun (ICQ#: 60779546) on 'CZprogram' Title: Re: C++ - jak se zbavit pretypovani Date: Mon Oct 8 14:01:46 2001 > Zdravim vsechny C++kare. > Ani ja nemam idealne riesenie, ale nie je velka praca dat do triedy Node funkciu: Node *Parent() { return (Node*)parent; } > Mam tridu, ktera ma slouzit jako uzel stromu. Potrebuju, aby kazdy uzel > stromu mel urcite vlastnosti -> vytvorim predka, od ktereho musi kazdy > realny > uzel stromu podedit. > > Predek muze hodne zjednodusene vypadat treba takto: > > class Base { > public: > Base* parent; // ukazatel na rodice > // definice spolecnych vlastnosti pro vsechny uzly > } > > Potom nejaky realny uzel muze vypadat treba takto: > > class Node : public Base { > int data; // nejaka data > int f(); // nejaka nove pridana funkce > } > > udelam instanci a zavolam funkci f(): > Node n; > n.f(); > > to jde bez problemu, ale uz nezavolam funkci f() pro rodice :( > > n.parent->f(); > > Musel bych volat: > > ((Node*)(n.parent))->f(); > > Mozna by slo usetrit nejake zavorky a lepsi je asi pouzivat dynamic_cast, > ale > to neni podstatne. Ja se chci zbavit toho pretypovani, protoze potrebuju > funkce rodice a sourozencu volat casto. > > Co s tim? > > Vymyslel jsem jedno reseni, ale je takove drsne... chtel bych neco lepsiho. > To > moje asi neni moc kompatibilni. Zde je to reseni. > > template <class T> class Base { > public: > T* parent; // ukazatel na rodice > // definice spolecnych vlastnosti pro vsechny uzly > } > > class Node : public Base<Node> { > int data; // nejaka data > int f(); // nejaka nove pridana funkce > } > > Ted muzu klidne zavolat n.parent->f(); > > > medvidek > > -- > ELVIRA - Extended LSD VoiceXML interpreter for Applications > http://www.fi.muni.cz/lsd/elvira > Engine for building dialog applications Free for noncommercial use http://xrs.winradio.com http://www.rbasic.com http://xrs.winradio.com/plugins.htm mailto:stofa@eshs-lab.com TopGun (Are you ready to fly ?)