如何专门化非模板化类的模板化成员函数?

Kyl*_*yle 5 c++ templates template-specialization

假设我有一个alpha.h文件:

class Alpha {
public:
    template<typename T> void foo();
};

template<> void Alpha::foo<int>() {}
template<> void Alpha::foo<float>() {}
Run Code Online (Sandbox Code Playgroud)

如果我包括多个CPP文件alpha.h与GCC 4.4编译时,报告说有多种定义foo<int>,并foo<float>在多个目标文件.对我有意义,所以我将最后两行更改为:

template<> extern void Alpha::foo<int>() {}
template<> extern void Alpha::foo<float>() {}
Run Code Online (Sandbox Code Playgroud)

但GCC说:

显式模板专门化不能有存储类

好的......所以我该如何正确地做到这一点?我担心C++不会允许我首先尝试做的事情,在这种情况下是否有一个很好的成语可以完成同样的事情?

Any*_*orn 10

使用内联关键字

template<> inline void Alpha::foo<int>() {}
Run Code Online (Sandbox Code Playgroud)

或者,在单独的cpp文件中提供实现


Edw*_*nge 6

您可以转发声明以及内联选项:

// .h
template<> void Alpha::foo<int>();

//.cpp
template<> void Alpha::foo<int>() {}
Run Code Online (Sandbox Code Playgroud)