Re[8]: Ну дают админы...
От: igor_soukhov  
Дата: 27.04.01 18:48
Оценка:
Здравствуйте 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
* thriving in a production environment *
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.