模板部分专业化

时间:2013-10-27 05:37:57

标签: c++ templates

template <typename T, unsigned D>
class Matrix
{
 public:
  T Determinant( void ) const;

  T m[D][D];
};


template <typename T>
T Matrix<T, 2>::Determinant( void ) const
{
  return m[0][0] * m[1][1] - m[1][0] * m[0][1];
}

你好,论坛。 我有这个代码,但我收到错误:

1>c:\dropbox\projects\math\matrix.h(319): error C3860: template argument list following class template name must list parameters in the order used in template parameter list
1>c:\dropbox\projects\math\matrix.h(319): error C2976: 'Math::Matrix<T,D>' : too few template arguments

不知道出了什么问题。请帮忙。

2 个答案:

答案 0 :(得分:2)

您需要提供该类专门化的定义。例如:

template <typename T, unsigned D>
class Matrix
{
 public:
  T Determinant( void ) const;

  T m[D][D];
};

template <typename T>
class Matrix <T, 2>
{
  T m[2][2];    

public:
  T Determinant (void) const;
};

template <typename T>
T Matrix<T, 2>::Determinant (void) const
{
  return m[0][0] * m[1][1] - m[1][0] * m[0][1];
}

如果没有这个,编译器将无法判断Matrix<T, 2>的专用版本是否包含Determinant方法。

答案 1 :(得分:0)

这可能是c++ template partial specialization member function

的副本

如前所述,你没有专门化方法,而是专门的类。