Здравствуйте ILYA_Varchev, 27.04.2001 11:43:07 вы писали:
>>>>указатель 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<CConcreteResultNode> это базовый класс для моего CConcreteResultNode... к
нему я и пытался привести... (проблема была в том что этот кастинг проводился был в методе
СОВСЕМ другого ТЕМПЛЕЙТНОГО класса (и T там обозначало не CConcreteResultNode) ...
>СResultNode<T2> *p2; >..... >СResultNode<T1> *p1 = ( СResultNode<T1>*) p2; >p1 ->Method1(...); >p1 ->Method2(...); > >будет, ВОЗМОЖНО, работать правильно, пока ты не будешь использовать переменные-члены класса >СResultNode<T2>. >Похожий код я встречал в MFC. Я думаю, что все знают класс CListView и у него функцию GetListCtrl()...Так вот эта функция реализована вот так: >CListCtrl& CListView::GetListCtrl() >{ > return *( ( CListCtrl* ) this ); >} >почему это работает? Да потому что у CListCtrl НЕТ ДАННЫХ. Всё что нужно CListCtrl — это CWnd::m_hWnd. А эта переменная определана у общего родителя — CWnd; именно поэтому всё и работает. > >Возможно нечто подобное происходит и у тебя в коде :=)
возможно ...
>Успехов!
Пасиба,
Igor