它不能按要求完成。出於某種原因(我不知道的理由)明確(即全)時封閉類也明確成員模板的專業化只允許(即完全)專業。這個要求在語言標準中明確闡述(參見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