我想创建在内部使用特定容器来确定不同类型的泛型类模板。像这样:
#include <vector>
#include <list>
template< typename F, template< class ... > class container_type = std::vector >
struct C
{
C();
template< typename U >
C(container_type< U >);
C(container_type< F >);
C(container_type< int >);
container_type< double > param;
};
C< unsigned, std::list > c;
最自然的方法是什么?比如说,您是否想以任何形式提及容器分配器的存在?
答案 0 :(得分:5)
这样的事情?
template< typename F, template<class T, class = std::allocator<T> > class container_type = std::vector >
struct C
{
C() {}
template< typename U >
C(container_type< U >) {}
C(container_type< F >) {}
C(container_type< int >) {}
container_type< double > param;
};
C< unsigned, std::list > c;
修改强>
std::queue
使用类似但更简单的方法,该方法由将在内部使用的容器类型进行参数化。希望这证明这种方法很自然。
上面的示例在VC ++ 10中进行了测试,并展示了如何处理分配器。