模板类中模板成员函数的专门化
我有一个带模板成员函数的模板类
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; } };
简单而简单:)