Re[7]: Ну дают админы...
От: ILYA_Varchev  
Дата: 27.04.01 17:43
Оценка:
Здравствуйте 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> *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; именно поэтому всё и работает.

Возможно нечто подобное происходит и у тебя в коде :=)

Успехов!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.