模板类中模板成员函数的专门化

我有一个带模板成员函数的模板类

template<class T> class A { public: template<class CT> CT function(); }; 

现在我想以两种方式专门化模板成员函数。 首先是与class级具有相同的types:

 template<class T> template<> // Line gcc gives an error for, see below T A<T>::function<T>() { return (T)0.0; } 

第二种types布尔:

 template<class T> template<> bool A<T>::function<bool>() { return false; } 

这是我如何testing它:

 int main() { A<double> a; bool b = a.function<bool>(); double d = a.function<double>(); } 

现在gcc给了我上面的标记:

 error: invalid explicit specialization before '>' token error: enclosing class templates are not explicitly specialize 

所以海湾合作委员会告诉我,我必须专门化A,如果我想专精function,对吧? 我不想这样做,我想要外部类的types打开…

最后的答案是:这是不可能的? 还是有办法?

是的,这是问题所在:

 error: enclosing class templates are not explicitly specialized 

没有专门的课程,你也不能专门化一个成员。

可以做的是把function中的代码放在一个单独的类中,并且专注于此,就像basic_string一样,依赖于一个单独的char_traits类。 然后非专业function可以调用性状类的助手。

如果更改实现,则可以使用重载。

 template <typename T> class Foo { public: template <typename CT> CT function() { return helper((CT*)0); } private: template <typename CT> CT helper(CT*); T helper(T*) { return (T)0.0; } bool helper(bool*) { return false; } }; 

简单而简单:)