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

Mar*_*ero 17 c++ templates specialization

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

template<typename T>  
void doStuff<T>() {}
Run Code Online (Sandbox Code Playgroud)

template<>
void doStuff<DefinedClass>();
Run Code Online (Sandbox Code Playgroud)

template<>
void doStuff<DefinedClass2>();
Run Code Online (Sandbox Code Playgroud)

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

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

Ker*_* SB 16

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

template <typename T> void doStuff() {}
//                        ^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

只有专业化template <>在前面和<...>后面都有一个名称,例如:

template <> void doStuff<int>() { }
Run Code Online (Sandbox Code Playgroud)

  • 不,它应该是`template <> void doStuff <int>();`for specialization和`template <typename T> void doStuff();`for general case ... (2认同)

Rei*_*ica 9

主模板的正确语法是:

template <typename T>
void doStuff() {}
Run Code Online (Sandbox Code Playgroud)

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

template <>
void doStuff<DefinedClass>() { /* function body here */ }
Run Code Online (Sandbox Code Playgroud)