Вам нужно будет создать шаблонный оператор внутри или вне класса.
Например, чтобы умножить N x M на M x M, возможно, вы захотите сделать:
template <int N, int M, class T>
friend Matrix<N, M, T> operator*(const Matrix<N, M, T> &lhs, const Matrix<M, M, T> &rhs);
Другие версии выглядят аналогично.Вероятно, было бы наиболее полезно определить это вне класса.
Чтобы умножить (N1 x M) на (M x N2), вы должны сделать:
template<int N1, int N2, int M, class T>
friend Matrix<N1, N2, T> operator*(const Matrix<N1, M, T> &lhs, const Matrix<M, N2, T> &rhs);