Here a new matrixMul is instantiated for each size of the input matrices, but this avoids that:
...

So something like this:

import std.stdio;

void foo(T, @generic size_t n, @generic size_t m)(const ref
T[n][m] matrix) {
     foreach (ref row; matrix)
         for (int i = 0; i < n; i++)
             writeln(row[i]);
}

void main() {
     int[2][3] m = [[10, 20],
                    [30, 40],
                    [50, 60]];

     foo(m);
}


means something like this, that is templated only on T:


import std.stdio;

void foo(T)(in size_t n, in size_t m, const T* matrix) {
     for (int j = 0; j < m; j++) {
         auto row = &matrix[j];
         for (int i = 0; i < n; i++)
             writeln(row[i]);
     }
}

void main() {
     int[2][3] m = [[10, 20],
                    [30, 40],
                    [50, 60]];

     foo(m.length, m[0].length, cast(int*)m.ptr);
}


Bye,
bearophile

Reply via email to