我定义了一个变量结构,如此
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
{...}
导致编译错误。 我意识到我的问题很简单,但谷歌搜索没有帮助。 所以请不要把腐烂的西红柿扔给我,谢谢你的答案。
答案 0 :(得分:7)
单参数特化的语法错误。您可能完全专注于现场宣布class T
。你想要这个:
template <class T>
struct Opa<T>
{
Opa()
{
std::cout << "One-argument template";
}
};
通过在template
之后的尖括号中列出部分特化的参数来声明部分特化(在您的情况下,是单个类型参数class T
),并且在主模板名称后面的尖括号中列出主模板的参数(在您的情况下,单个类型参数T
)。