【问题标题】:template partial spcialization模板偏特化
【发布时间】:2013-10-27 05:37:56
【问题描述】:
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

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

【问题讨论】:

标签: c++ templates


【解决方案1】:

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

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&lt;T, 2&gt; 的专用版本是否包含Determinant 方法。

【讨论】:

    【解决方案2】:

    这可能与 c++ template partial specialization member function 重复

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 1970-01-01
      相关资源
      最近更新 更多