20

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

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

template<>
void doStuff<DefinedClass>();

template<>
void doStuff<DefinedClass2>();

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

注意:doStuff 将在其主体中使用 T 来声明一个变量。

4

3 回答 3

18

主模板没有获得第二对模板参数。只是这个:

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

只有专业的名称template <>前面有a,后面有a <...>,例如:

template <> void doStuff<int>() { }
于 2013-02-08T09:51:16.443 回答
5

主模板的正确语法是:

template <typename T>
void doStuff() {}

要定义专业,请执行以下操作:

template <>
void doStuff<DefinedClass>() { /* function body here */ }
于 2013-02-08T10:01:34.020 回答
3

我猜这不是正确的语法(因为它没有编译)。我该怎么做?doStuff 将在其主体中使用 T 来声明一个变量。

template<typename T>  
void doStuff() 
{
  T t = T();   // declare a T type variable

}

是否可以在.cpp 中声明主体?

C++ 只支持inclusive mode,不能单独编译后再链接。

从评论中,如果您想专注于int类型:

template<>
void doStuff<int>()
{
}
于 2013-02-08T10:02:37.153 回答