0
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

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

4

2 回答 2

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方法。

于 2013-10-27T05:56:33.310 回答
0

这是c++ 模板部分特化成员函数的可能副本

正如那里提到的,您不专门化方法,而是专门化类本身。

于 2013-10-27T06:39:08.443 回答