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
不知道出了什么问题。请帮忙。
答案 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
的副本如前所述,你没有专门化方法,而是专门的类。