Здравствуйте, Аноним, Вы писали:
А>есть мысли, как с этим бороться?
typename забыли

:
template<class T>
class Viewer {
typedef hash_multimap<T*, typename T::Ptr, typename T::Hash, typename T::Equal> ParentMap;
};
Viewer<Item> v;
есть набор классов, в которых определены типы, определяющие поведение объекта
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 ещё одного типа, который надо использовать в шаблоне,
придётся переписывать все места, где конструируется шаблонный тип
есть мысли, как с этим бороться?
Здравствуйте, Alexey F, Вы писали:
А>>есть мысли, как с этим бороться?
AF>typename забыли
:
спасибо огромное. работает!