假设我有一个文件 alpha.h:
class Alpha {
public:
template<typename T> void foo();
};
template<> void Alpha::foo<int>() {}
template<> void Alpha::foo<float>() {}
如果我在多个 cpp 文件中包含 alpha.h 并使用 GCC 4.4 进行编译,它会抱怨存在多个对象文件的多个定义foo<int>
和foo<float>
跨多个对象文件。对我来说很有意义,所以我将最后两行更改为:
template<> extern void Alpha::foo<int>() {}
template<> extern void Alpha::foo<float>() {}
但随后 GCC 说:
显式模板特化不能有存储类
好的......那么我应该如何正确地做到这一点?我担心 C++ 不允许我首先尝试做的事情,在这种情况下,是否有一个好的习语可以完成同样的事情?