передача типов в шаблон
От: Аноним  
Дата: 14.02.10 19:38
Оценка:
есть набор классов, в которых определены типы, определяющие поведение объекта

class Item {
public:
        typedef boost::shared_ptr<Item> Ptr;
        class Hash {
                size_t operator()(const Item& k) const { ... }
                bool operator()(const Item& a, const Item& b) const { ... }
        };
        class Equal { ... };
};


нужно передать тип в шаблон так, чтобы можно было использовать вложенные типы.
я себе представляю это как

template<class T>
class Viewer {
        typedef hash_multimap<T*, T::Ptr, T::Hash, T::Equal> ParentMap;
};
Viewer<Item> v;


этот код не компилируется, приходится писать более громоздко:
template<class T, typename TPtr, typename THash, typename TEqual>
class Viewer {
        typedef hash_multimap<T*, TPtr, THash, TEqual> ParentMap;
};
Viewer<Item, Item::Ptr, Item::Hash, Item::Equal> v;


всё усложняется тем, что есть ещё вложенность и наследование шаблонов,
и кроме T ещё несколько параметров, что увеличивает громоздкость описаний параметров шаблонов.
другой минус — при добавлении в Item ещё одного типа, который надо использовать в шаблоне,
придётся переписывать все места, где конструируется шаблонный тип

есть мысли, как с этим бороться?
Re: передача типов в шаблон
От: Alexey F  
Дата: 14.02.10 19:43
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>есть мысли, как с этим бороться?

typename забыли :
template<class T>
class Viewer {
        typedef hash_multimap<T*, typename T::Ptr, typename T::Hash, typename T::Equal> ParentMap;
};
Viewer<Item> v;
Re[2]: передача типов в шаблон
От: SMT  
Дата: 14.02.10 19:54
Оценка:
Здравствуйте, Alexey F, Вы писали:

А>>есть мысли, как с этим бороться?

AF>typename забыли :

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