sapunidze wrote:
> > class YItem {...};
>
> template <typename T> YCollection: public YItem {...};
>
>
> вопрос: как, если возможно, спуститья по иерархии вниз... мне в коде необходимо узнать, что данный класс является YCollection<?> и не важно какого именно типа параметр шаблона.
> т.е. сделать что-то типа
>
> > if(dynamic_cast<YCollection<T>*>(currentItem))
> {
> ...
> }
>
>
> возможно ли?
Возможно.
Создай специальный нешаблонный класс-тэг именно для идентификации YCollection<> и публично отнаследуй YCollection<> от него. Затем в dynamyc_cast<> приводи к этому тэгу, чтобы узнать, является ли объект YCollection<>.
class YItem {/*...*/};
struct YCollection_tag {};
template <typename T>
class YCollection : public YItem , public YCollection_tag
{/*...*/};
void foo(YItem* item)
{
if(dynamic_cast<YCollection_tag*>(item))
{
// item is YCollection<>
}
}
--
Maxim YegorushkinPosted via RSDN NNTP Server 1.9 alpha