Re: template & dynamic_cast<>
От: MaximE Великобритания  
Дата: 03.06.04 09:37
Оценка: 36 (2)
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 Yegorushkin
Posted via RSDN NNTP Server 1.9 alpha
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.