Страница 1 из 1
Проблема с dynamic_cast (C++)
Добавлено: 26.10.2011 12:36
Гость
Код: Выделить всё
class A {
public:
virtual bool isB() { return false; }
...
};
class B : private /* sic! */ A {
public:
virtual bool isB() { return true; }
...
};
void A::somefunction()
{
if( isB() ) {
// debug check to prevent other derived classes of A from getting smart!
ASSERT( dynamic_cast<B *>(this) == this );
B *b = static_cast<B *>(this);
b->doSomething();
}
}
Не работает. По стандарту dynamic_cast работает только с public inheritance. Чо делать?
Спасибо заранее за ценные мысли и советы

Re: Проблема с dynamic_cast (C++)
Добавлено: 27.10.2011 08:36
Вий
Объявить somefunction() виртуальной и перегрузить её в классе B...
Re: Проблема с dynamic_cast (C++)
Добавлено: 28.10.2011 20:17
Vova
Что именно не работает?
Замечу, что
dynamic_cast<B *>(this) == this
будет true всегда, не важно какой конкретный класс, если только не имеет место быть множественное наследование.
Re: Проблема с dynamic_cast (C++)
Добавлено: 29.10.2011 20:39
vovan
Гость писал(а):Не работает. По стандарту dynamic_cast работает только с public inheritance. Чо делать?
Надо начать с дизайна. Класс A ничего не должен знать о своих наследниках.
В данном случае я бы советовал использовать решение Вия только метод объявить как protected