我需要在c ++中专门化一个函数模板。
template<typename T>
void doStuff<T>() {}
要
template<>
void doStuff<DefinedClass>();
和
template<>
void doStuff<DefinedClass2>();
我猜这不是正确的语法(因为它没有编译)。我应该怎么做?
另外,由于我在doStuff<DefinedClass>
中没有未定义的模板参数,是否可以在.cpp中声明主体?
注意:doStuff将使用T wihtin其主体来声明变量。
答案 0 :(得分:16)
主模板没有获得第二对模板参数。就是这样:
template <typename T> void doStuff() {}
// ^^^^^^^^^
只有专业版在前面有template <>
,名称后面有<...>
,例如:
template <> void doStuff<int>() { }
答案 1 :(得分:4)
主模板的正确语法是:
template <typename T>
void doStuff() {}
要定义专业化,请执行以下操作:
template <>
void doStuff<DefinedClass>() { /* function body here */ }
答案 2 :(得分:2)
我猜这不是正确的语法(因为它没有编译)。我该怎么办? doStuff将使用T wihtin它的主体来声明变量。
template<typename T>
void doStuff()
{
T t = T(); // declare a T type variable
}
是否可以在.cpp中声明主体?
C ++仅支持inclusive mode
,您不能单独编译,然后再链接。
如果您想专门针对int
类型:
template<>
void doStuff<int>()
{
}