Специализация шаблона функции с нетиповыми параметрами шаблона

Я использовал шаблон функции, чтобы вычислить определитель матрицы размера 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: явная специализация ‘двойной определитель<1> (double [] [1]) ‘не является специализацией шаблона функции

В чем проблема? Как я могу прекратить это?


2017/6/23
Я изменил код, он работает в GCC!

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector