模板模板参数的部分专业化,参数数量不同

Partial specialization of template template parameters, with varying number of parameters

本文关键字:参数 数数 专业化      更新时间:2023-10-16

如果标题没有意义,这是问题的要点:

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和其他地方的许多模板都有其他参数,例如分配器,并比较操作(例如STD :: MAP)。我不在乎那些。我想专门为带有t的"孔"的std ::向量。

想法?我觉得我需要某种包装对象或某种间接的对象才能实现这一目标 - 它也可能会改变用户实例化这些模板的方式。

在C 11中您可以使用variadics:

template <template<typename T, typename...> class ContainerOf> 
class Foo;