Witam, mam taki problem designerski, otóż mamy 2 (lub więcej) klasy pochodne D1, D2 oraz 1 klasę bazową B.
Zakładamy, że dysponujemy wskaźnikiem do obiektu bazowego.
Czy istnieje jakiś wzorzec projektowy lub sposób pozwalający w prosty sposób uzyskać wskaźnik do obiektu pochodnego ?
Uprzedzam, że dynamic cast nie jest rozwiązaniem mojego problemu.
Do tej pory wymyśliłem coś takiego:
class D1;
class D2;
class B{
virtual D1 * getD1() { return NULL; }
virtual D2 * getD2() { return NULL; }
};
class D1 : public B{
D1 * getD1() { return this; }
};
class D2 : public B{
D2 * getD2() { return this; }
};
//bla bla bla tutaj mamy jakiś wskaźnik na B powiedzmy ptr i robimy:
if(ptr->getD1() != NULL){
D1 * ptrToD1 = ptr->getD1();
ptrToD1->jakas_metoda_z_charakterystyczna_dla_D1();
}
else{
D2 * ptrToD2 = ptr->getD2();
ptrToD2->jakas_metoda_z_charakterystyczna_dla_D2();
}
ale nie wygląda mi to na dobre rozwiązanie...
Ostatecznie proszę o wytłumaczenie dlaczego dynamic_cast a nie takie rozwiązanie (lub na odwrót), ale nie ukrywam, że liczę na sprytniejsze rozwiązanie :).
Z góry dzięki za pomoc.