c – 模板类参数类型的模板类成员的特化

我有一个模板类Matrix.我想专门为类型复杂的函数,其中T可以是任何东西.我试过这个:

  6 template <typename T>
  7 class Matrix {
  8       public :
  9             static void f();
 10 };          
 11 template<typename T> void Matrix<T>::f() { cout << "generic" << endl; }
 12 template<> void Matrix<double>::f() { cout << "double" << endl; }
 13 template<typename T> void Matrix<std::complex<T> >::f() { cout << "complex" << endl; }

第13行无法编译.我怎样才能做到这一点 ?

最佳答案
在第11行和第12行中,您已经为C标准14.7 / 3允许的类模板成员声明了显式特化(14.5.2 / 2也包含了一个很好的例子).在第13行,你试图部分地专门化一个类模板,这在这种形式中是不允许的(这是部分特化,因为你不知道整个类型std :: complex< T>因为它仍然依赖于T).你应该对整个班级进行部分专业化.

转载注明原文:c – 模板类参数类型的模板类成员的特化 - 代码日志