Posted By: medvidek (Zase za polarnim kruhem) on 'CZprogram' Title: C++ - jak se zbavit pretypovani Date: Mon Oct 8 13:25:24 2001 Zdravim vsechny C++kare. 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