Реализовать матрицу по шаблону c ++ - PullRequest
0 голосов
/ 27 октября 2018

Как и выше, но я определяю размер матрицы по параметру шаблона. Когда я пытаюсь реализовать умножение матрицы, возникают некоторые проблемы. Мой прототип умножения матрицы показан ниже:

matrix_array<class __item__, std::size_t ROW, std::size_t COL>;
matrix_array<__item__, ROW, COL> operator* (
        const matrix_array<__item__, COL, >& b) const;

Итак, возникает вопрос,Как передать третий аргумент шаблона матрицы b? Я могу просто определить новый параметр шаблона, но это так ужасно.

1 Ответ

0 голосов
/ 27 октября 2018

При умножении матриц один «размер» должен быть общим для двух матриц, поэтому некоторые варианты именования могут сбивать с толку.

С функцией, не являющейся членом, может быть проще понять, что ожидаемая подпись будетбыть:

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
};
...