2) Если MyDeque
и std::deque
имеют одинаковую подпись шаблона, вы можете передать имя шаблона в качестве параметра шаблона Foo
:
#include <deque>
template <class T, class>
struct MyDeque {
};
template <
template<class T, class Alloc = std::allocator<T> > class Container >
class Foo {
struct Bar {
int i;
};
Container<Bar> m_bar;
};
int main () {
Foo<std::deque> m_bar;
Foo<MyDeque> m_bar2;
}
1) Это делает идеальносмысл делать то, что вы просите.В частности, мне нравится делать это таким образом, чтобы я мог легко указать std::list<>
, std::vector<>
или другие стандартные контейнеры.
Если вы не можете сделать свои подписи шаблонов совместимыми, и если у вас есть функции C ++ 11, вы можете попробовать следующее объявление шаблона:
template < template <typename ...> class Container >
class Foo { … };