2014-11-14 5 views
0

У меня есть некоторые проблемы с метапрограммированием, я не могу это вообще понять. Я пытаюсь написать рекурсивную функцию, которая будет умножать две матрицы. Моя функция выглядит так:мета-программирование рекурсия C++

void multiplyMatrix(int a[MAX][MAX],int b[MAX][MAX]){ 

    static int sum,i=0,j=0,k=0; 

    if(i<m){ //row of first matrix 
     if(j<p){ //column of second matrix 
      if(k<n){ 
       sum=sum+a[i][k]*b[k][j]; 
       k++; 
       multiplyMatrix(a,b); 
      } 
      c[i][j]=sum; 
      sum=0; 
      k=0; 
      j++; 
      multiplyMatrix(a,b); 
     } 
     j=0; 
     i++; 
     multiplyMatrix(a,b); 
    } 
} 

где C - статический массив. Я хотел бы изменить его, чтобы выглядеть:

template<int N, int K, int L> 
void multiply(int (*A)[N][K], int (*B)[K][L], int (*C)[N][L]); 

Может кто-нибудь дать мне совет, как сделать это? Я хочу, чтобы окончательная матрица сохранялась в массиве C. Я понятия не имею, что такое «базовая функция». Спасибо за вашу помощь!

+0

Должно быть 'шаблон недействительными умножения (интермедиат (А) [N], [K], Int (B) [K] [L], int (C) [N] [L]); 'без каких-либо' * ' –

+0

@BasileStarynkevitch: указатель верен, ссылка лучше. С вашей версией 'N' не вычитается. – Jarod42

ответ

0

После может помочь:

template <int N, int K, int L> 
void multiply(const int (&lhs)[N][K], const int (&rhs)[K][L], int (&res)[N][L]) 
{ 
    for (int n = 0; n != N; ++n) { 
     for (int l = 0; l != L; ++l) { 
      res[n][l] = 0; 
      for (int k = 0; k != K; ++k) { 
       res[n][l] += lhs[n][k] * rhs[k][l]; 
      } 
     } 
    } 
} 

Live example

Смежные вопросы