它不能按要求完成。出于某种原因(我不知道的理由)明确(即全)时封闭类也明确成员模板的专业化只允许(即完全)专业。这个要求在语言标准中明确阐述(参见C++ 98中的14.7.3/18,C++ 11中的C++ 03和14.7.3/16)。
与此同时,构件类的局部特模板是允许的,在许多情况下可以被用作一种解决方法(虽然难看)。但是,很明显,它只适用于类模板。当涉及到成员函数模板时,必须使用替代解决方案。
例如,一个可能的解决方法是将调用委托给一个模板类的静态成员,专门的类,而不是(这常被推荐为比函数模板http://www.gotw.ca/publications/mill17.htm专业化更好的主意)
template <class T>
class MyClass
{
template <int N, typename DUMMY = void> struct Func {
static void func() { printf("unspecialized\n"); }
};
template <typename DUMMY> struct Func<0, DUMMY> {
static void func() { printf("specialized\n"); }
};
template <int N> void func() { Func<N>::func(); }
};
来源
2012-04-16 17:29:43
AnT
你应该添加你得到的错误信息,因为“不起作用”真的没有告诉我们很多。 – sth 2012-04-16 17:23:36