没有参数的函数的模板专用化

时间:2013-02-08 09:49:43

标签: c++ templates specialization

我需要在c ++中专门化一个函数模板。

template<typename T>  
void doStuff<T>() {}

template<>
void doStuff<DefinedClass>();

template<>
void doStuff<DefinedClass2>();

我猜这不是正确的语法(因为它没有编译)。我应该怎么做? 另外,由于我在doStuff<DefinedClass>中没有未定义的模板参数,是否可以在.cpp中声明主体?

注意:doStuff将使用T wihtin其主体来声明变量。

3 个答案:

答案 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>()
{
}