可变结构规范

时间:2014-09-22 09:32:03

标签: c++ variadic-templates

我定义了一个变量结构,如此

template <class T, class... TRest>
struct Opa
{
    Opa()
    {
        std::cout << "Mutiple-arguments template";
    }
};

并希望将其专门用于1参数的情况,如下所示

template <>
struct Opa<class T>
{
    Opa()
    {
        std::cout << "One-argument template";
    }
};

但编译器只是忽略了第二个结构,而忽略了

的输出
Opa<int> opa;
Opa<int, int> opa_opa;

Mutiple-arguments template, Mutiple-arguments template

以不同方式指定单参数模板,例如

template <class T>
struct Opa
{...}

导致编译错误。 我意识到我的问题很简单,但谷歌搜索没有帮助。 所以请不要把腐烂的西红柿扔给我,谢谢你的答案。

1 个答案:

答案 0 :(得分:7)

单参数特化的语法错误。您可能完全专注于现场宣布class T。你想要这个:

template <class T>
struct Opa<T>
{
    Opa()
    {
        std::cout << "One-argument template";
    }
};

Live example

通过在template之后的尖括号中列出部分特化的参数来声明部分特化(在您的情况下,是单个类型参数class T),并且在主模板名称后面的尖括号中列出主模板的参数(在您的情况下,单个类型参数T)。