我正在尝试为类定义之外的显式专用类模板定义构造函数,如下所示:
template <typename T>
struct x;
template <>
struct x<int> {
inline x();
/* This would have compiled:
x() {
}
*/
};
template <> // Error
x<int>::x() {
}
但这似乎是一个错误。 Comeau说:error: "x<int>::x()" is not an entity that can be explicitly specialized
,即使完整的课程是专业的。
这里有什么问题?
答案 0 :(得分:13)
不要为定义指定template<>
:
template <typename T>
struct x;
template <>
struct x<int> {
x();
};
inline x<int>::x(){}
编辑:构造函数定义不是特化,因此template<>
是不必要的。它是专业化构造函数的定义。因此,您只需要为任何其他非模板类指定类型。