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