首页 > 解决方案 > 如何共享运营商返回的数据

问题描述

您好我目前正在尝试为矩阵实现模板库,因此我正在实现一些操作,例如 transpose() 操作。

我还希望运算符返回的矩阵(如转置)与原始矩阵共享数据。

例子:

matrix <int> x(3,3);
x.transpose() [2][1] = 42;

那么如果我读x[1][2]必须是42

我可以从哪里开始的任何想法?

提前致谢

标签: c++visual-c++c++14c++17

解决方案


大致如下:

template<class Matrix>
struct Transposed
{
    Transposed(Matrix& matrix) : matrix_(matrix)
    { }

    decltype(auto) operator()(int row, int col)
    {
        return matrix_(col, row);
    }

    Matrix& matrix_;
};

template<typename T>
struct Matrix
{
    auto transposed()
    {
        return Transposed<Matrix>{*this};
    }

    ...
};

如果您从头开始实现矩阵,我不明白为什么[i][j]应该首选(i, j)更容易实现的语法。


推荐阅读