可变结构规范

Ale*_* B. 3 c++ variadic-templates

我定义了一个可变参数结构

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

并希望专门针对具有1个参数的情况进行专门化,如下所示

template <>
struct Opa<class T>
{
    Opa()
    {
        std::cout << "One-argument template";
    }
};
Run Code Online (Sandbox Code Playgroud)

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

Opa<int> opa;
Opa<int, int> opa_opa;
Run Code Online (Sandbox Code Playgroud)

Mutiple-arguments template, Mutiple-arguments template.

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

template <class T>
struct Opa
{...}
Run Code Online (Sandbox Code Playgroud)

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

Rei*_*ica 7

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

template <class T>
struct Opa<T>
{
    Opa()
    {
        std::cout << "One-argument template";
    }
};
Run Code Online (Sandbox Code Playgroud)

实例

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