Здравствуйте igor_soukhov, 27.04.2001 10:12:11 вы писали:
>Здравствуйте ILYA_Varchev, 27.04.2001 08:13:50 вы писали: > >>>указатель p — указывает на обект CConcreteResultNode... >>>статический тип указателя p — CSnapInItem .... я его хочу привести к >>>СResultNode<CConcreteResultNode>... В СResultNode есть v-метод, кооторый >>>мне надо вызвавть(этот метод переопределяется в CConcreteResultNode). >>> >>>в это приведения я делал из metoda другого темплейтного класса ... >>>код там был такой: >>>СResultNode<T> *pConcrecteResultNode = dynamic_cast<СResultNode<T> >(p); >>> >>>естественно что T в этом методе — это не CConcreteResultNode посему и был облом ... >>> >>>Best regards, >>>Igor >>> >>вместо СResultNode<T> *pConcrecteResultNode = dynamic_cast<СResultNode<T> >(p); >>не пробовал использовать >>СResultNode<T> *pConcrecteResultNode = dynamic_cast<СResultNode<T>* >(p); >> >>может поможет. >это очепятка была ;) > >Igor >
dyn_cast совершенно правильно работает — например СResultNode<T1> и СResultNode<T2> совершенно разные типы и dynamic_cast выдаст NULL при попыке преобразовать один тип к другому. Однако код вида:
будет, ВОЗМОЖНО, работать правильно, пока ты не будешь использовать переменные-члены класса
СResultNode<T2>.
Похожий код я встречал в MFC. Я думаю, что все знают класс CListView и у него функцию GetListCtrl()...Так вот эта функция реализована вот так:
CListCtrl& CListView::GetListCtrl()
{
return *( ( CListCtrl* ) this );
}
почему это работает? Да потому что у CListCtrl НЕТ ДАННЫХ. Всё что нужно CListCtrl — это CWnd::m_hWnd. А эта переменная определана у общего родителя — CWnd; именно поэтому всё и работает.
Возможно нечто подобное происходит и у тебя в коде :=)