如果标题没有意义,这就是问题的要点:
template <template <class> class ContainerOf>
class Foo;
template <>
class Foo<boost::optional> // works!
{
// ...
};
// ERROR! std::vector takes two parameters
// T and Alloc.
template <>
class Foo<std::vector>
{
// ...
};
在本质上,我想专注于各种模板,它们采用单一类型参数.但是,STL和其他地方的许多模板都有其他参数,例如Allocators和Compare操作(例如std :: map).我不关心那些.我想专注于一个带有“洞”的std :: vector,其中T是.
思考?我觉得我需要某种包装器对象,或某种间接来实现这一点 – 它也可能会改变用户实例化这些模板的方式.
最佳答案 在C 11中,您可以使用可变参数:
template <template<typename T, typename...> class ContainerOf>
class Foo;