Особенности использования классов - страница 2

 
Sergey Gridnev #:
Двунаправленный список.

Это вот такими методами (для случая любых классов) решается (чисто для понимания, на коленке писано):

class NodeAny{
public:
   NodeAny* prev;
   NodeAny* next;
   void* it;
   ~NodeAny(){delete it;}
   template<typename Type>
   Type* Get() {return dynamic_cast<Type*>(it);}
};

class C1{
public:
   void P() {Print("C1");}
};

class C2{
public:
   void P() {Print("C2");}
};

void OnStart()
{
   NodeAny a;
   NodeAny b;
   a.it=new C1;
   b.it=new C2;
   a.next=&b;
   b.prev=&a;
   a.Get<C1>().P();
   a.next.Get<C2>().P(); 
}
 
Vladimir Simakov #:
А вот это уже реально жуткая жуть.
 
Вадим Калашников #:
Похоже вы пытаетесь написать спагетти код. Так делать нельзя. Черевато нулевой читаемостью кода и регулярными падениями. То, что вы пишите является так называемым ***. Пересмотрите архитектуру. 

Да ну что вы! Это известный "паттерн проектирования" из "КНИГИ".