Re[4]: Динамический полиморфизм приперегрузке функций
От: dip_2000 Россия  
Дата: 16.07.07 13:39
Оценка:
А>Да, в самом деле, getSelf для потомков перегружают Base::getSelf. Не знал про такую фичу
А>Но все равно, вы хотите, чтобы компилятор сделал выброр между функциями Tester::Test(Derived1*) и Tester::Test(Derived2*) на основании типа, который вернет функция getSelf, а этот тип будет известен только во время выполнения. В данном случае, видимо, значение, возвращаемое pBase1->getSelf(), неявно статически приводится к Base*, а потом компилятор не может привести Base* к Derived1* или Derived2*, поэтому и сообщает об ошибке.
Не правда! В случае когда есть одна функция (например
void Test(Derived1* Value)

) и в нее передаем Derived1 — все корректно.
Я понимаю почему возникает проблемма при компиляции, я спрашиваю есть ли хороший способ это обойти? Без switch и RTTI(для того что бы от них уйти и придумана такая иерархия)?

Еще раз: совершенно очевидно, что при статическом полиморфизме(перегрузке функций) у нас проблемм бы не возникло. Но, как верно замечено, мы узнаем тип только в момент исполнения. Но. Он нам известен. Известен конкретный тип. Как можно для него вызвать нужную функцию?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.