Перегрузка операторов в матрице с использованием шаблонов выражений - PullRequest
0 голосов
/ 05 марта 2019

Я пытался выяснить шаблоны выражений с прошлой пары дней, но не смог пройти через это. Я строю матрицу, начиная с оператора добавления. Я строю с использованием C ++ 14. Мой matrix.h выглядит так:

template <typename T, std::size_t COL, std::size_t ROW>
class Matrix {
public:
    using value_type = T;

    Matrix() : values(COL * ROW) {}

    static size_t cols() { return COL; }
    static size_t rows() { return ROW; }

    const T& operator()(size_t x, size_t y) const { return values[y * COL + x]; }
    T& operator()(size_t x, size_t y) { return values[y * COL + x]; }

    template <typename E>
    Matrix<T, COL, ROW>& operator=(const E& expression) {
        for (std::size_t y = 0; y != rows(); ++y) {
            for (std::size_t x = 0; x != cols(); ++x) {
                values[y * COL + x] = expression(x, y);
            }
        }
        return *this;
    }

private:
    std::vector<T> values;
};
template <typename LHS, typename RHS>
class MatrixSum
{
public:
    using value_type = typename LHS::value_type;

    MatrixSum(const LHS& lhs, const RHS& rhs) : rhs(rhs), lhs(lhs) {}

    value_type operator() (int x, int y) const  {
        return lhs(x, y) + rhs(x, y);
    }
private:
    const LHS& lhs;
    const RHS& rhs;
};
template <typename LHS, typename RHS>
MatrixSum<LHS, RHS> operator+(const LHS& lhs, const LHS& rhs) {
    return MatrixSum<LHS, RHS>(lhs, rhs);
}

Основная функция Cpp файла выглядит так:

Matrix<int,5,5>mx,my;
mx+my;

Это показывает следующую ошибку:

invalid operands to binary expression ('Matrix<int, 5, 5>' and 'Matrix<int, 5, 5>')
        mx+my;

Я много искал в Интернете, но я явно что-то упустил. Код выше взят из https://riptutorial.com/cplusplus/example/19992/a-basic-example-illustrating-expression-templates. Я был бы признателен, если бы можно было поделиться некоторыми ресурсами для понимания шаблонов выражений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...