如何共享运营商返回的数据[重复]

问题描述 投票:2回答:2

这个问题在这里已有答案:

嗨,我目前正在尝试为矩阵实现模板库,所以我正在实现一些像transpose()操作这样的操作。

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

例:

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

然后如果我读x[1][2]必须是42

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

提前致谢

c++ visual-c++ c++14 c++17
2个回答
1
投票

以下内容:

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),这更容易实现。


-1
投票

我认为你可以使用铸造操作员。一个简单的样本可能是:

class x {
public:
    operator matrix&() { return transpose(); }
protected:
    auto transpose() -> matrix & { 
        /* returning the matrix  */
    }
};
© www.soinside.com 2019 - 2024. All rights reserved.