具有非类型模板参数的功能模板的特殊化

时间:2017-06-23 01:17:32

标签: c++ templates explicit-specialization

我使用函数模板来计算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工作!

0 个答案:

没有答案