【发布时间】:2014-09-10 06:31:59
【问题描述】:
我有一个标题,其中包含一个带有模板成员的类和该成员的一些特化:
#include <iostream>
class Foo {
public:
template<typename T>
void print(const T& t) {
std::cout << t << std::endl;
}
};
template<>
void Foo::print<int>(const int& t) {
std::cout << t << std::endl;
}
此标头包含在多个源文件中。
如果我将专业化放在类定义中,那么 GCC 会抱怨:
error: explicit specialization in non-namespace scope ‘class Foo’
但是如果我将特化移到类定义之外,VC++ 就会抱怨多重定义的符号。
两个编译器都会满意的正确方法是什么?
【问题讨论】:
标签: c++ templates template-specialization