Здравствуйте igor_soukhov, 26.04.2001 07:59:47 вы писали:
Hi !
В общем я был неправ ... ;(
иерархия классов такова
СSnapInItem(ATL)
^
|
CSnapInItemImpl<T> : public СSnapInItem
^
|
CXXXData<T> : public CSnapInItemImpl<T>
^
|
CResultNode<T> :public CXXXData<T>
^
|
CResultNodeNum<T> : public CResultNode<T>
^
|
CConcreteResultNode : CResultNodeNum<CConcreteResultNode>
указатель p — указывает на обект CConcreteResultNode...
статический тип указателя p — CSnapInItem .... я его хочу привести к
СResultNode<CConcreteResultNode>... В СResultNode есть v-метод, кооторый
мне надо вызвавть(этот метод переопределяется в CConcreteResultNode).
в это приведения я делал из metoda другого темплейтного класса ...
код там был такой:
СResultNode<T> *pConcrecteResultNode = dynamic_cast<СResultNode<T> >(p);
естественно что T в этом методе — это не CConcreteResultNode посему и был облом ...
Best regards,
Igor
>Привет Андрей, > >>>(ксати буквально седня столкнулся с проблемой в VC6 — у мя есть иерархия высотой 3-4 класса — наследование от темплейтных классов (и не только) — но наследование одиночное) — и >>>dynamic_cast — не смог мне откастить (получал NULL pointer) — а (T*) преобразование помогло ... что под указателем лежит нунжый обект — 100% (во первых так оно и есть вот вторых виртуалтные метобы вызываются прально). > >>Скорее всего ты пытался привести dynamic_cast'ом указатель к классу не имеющему ниодной виртуальной >функции при выключеной в опциях проекта RTTI. >во первых я писал что ВИРТУАЛЬНЫЕ методы работают ! :) >во вторых — то что ты описал — проверяется в complile-time ... то есть просто бы не скомпилилось... >завтра нарисую иерархию наследования — может че проясним ... > >>С наилучшими, >>Андрей. > >Пасиба, >Igor