При умножении матриц один «размер» должен быть общим для двух матриц, поэтому некоторые варианты именования могут сбивать с толку.
С функцией, не являющейся членом, может быть проще понять, что ожидаемая подпись будетбыть:
template <typename T, std::size_t ROW, size_t K, size_t COLUMN>
Matrix<T, ROW, COLUMN> operator * (const Matrix<T, ROW, K>& lhs,
const Matrix<T, K, COLUMN>& rhs);
Таким образом, как член, lhs
будет *this
:
template <typename T, std::size_t ROW, size_t COL /*K*/>
class Matrix
{
// ...
template <size_t COLUMN>
Matrix<T, ROW, COLUMN> operator * (const Matrix<T, COL, COLUMN>& rhs) const;
// "confusing" name: rhs has 2 "column" names
};