我使用函数模板来计算n维矩阵的行列式。
template <int dimension>
double get_cofactor(double A[dimension][dimension],
double temp[dimension-1][dimension-1],
int p, int q)
{
int i = 0, j = 0;
for (int row = 0; row < dimension; row++)
{
for (int col = 0; col < dimension; col++)
{
if (row != p && col != q)
{
temp[i][j++] = A[row][col];
if (j == dimension - 1)
{
j = 0;
i++;
}
}
}
}
}
template <int dimension>
double determinant(double A[dimension][dimension])
{
double ret = 0.0;
double temp[dimension-1][dimension-1] ={ 0.0 };
int sign = 1;
for (int i=0; i<dimension; ++i) {
get_cofactor<dimension>(A, temp, 0, i);
ret += sign * A[0][i] * determinant<dimension-1>(temp);
sign = -sign;
} //end of for
return ret;
}
我使用以下函数模板的特化来终止递归。
template <>
double determinant<1>(double A[][1])
{
return A[0][0];
}
但专业化无法通过编译。发生了一个错误。
错误C2912:显式特化'双重决定因素&lt; 1&gt;(double [] [1])'不是函数模板的特化
有什么问题?我该如何终止它?
2017年6月23日 我修改了代码,它在GCC工作!