C++ 如何共享操作员返回的数据

C++ 如何共享操作员返回的数据,c++,visual-c++,c++14,c++17,C++,Visual C++,C++14,C++17,您好,我目前正在尝试为矩阵实现一个模板库,所以我正在实现一些操作,比如transpose()操作 我还希望操作符返回的矩阵,如转置,与原始矩阵共享数据 例如: matrix <int> x(3,3); x.transpose() [2][1] = 42; 矩阵x(3,3); x、 转置()[2][1]=42; 如果我读到x[1][2]必须是42 我可以从哪里开始 提前感谢以下几点: template<class Matrix> struct Transposed {

您好,我目前正在尝试为矩阵实现一个模板库,所以我正在实现一些操作,比如transpose()操作

我还希望操作符返回的矩阵,如转置,与原始矩阵共享数据

例如:

matrix <int> x(3,3);
x.transpose() [2][1] = 42;
矩阵x(3,3);
x、 转置()[2][1]=42;
如果我读到
x[1][2]
必须是
42

我可以从哪里开始


提前感谢以下几点:

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

    ...
};
模板
结构转置
{
转置(矩阵和矩阵):矩阵(矩阵)
{ }
decltype(自动)运算符()(int行,int列)
{
返回矩阵(列,行);
}
矩阵&Matrix;
};
模板
结构矩阵
{
自动转置()
{
返回转置{*this};
}
...
};

如果你从头开始实现一个矩阵,我不明白为什么
[I][j]
语法应该比
(I,j)
更容易实现。

我认为你可以使用强制转换操作符。一个简单的样本可能是:

class x {
public:
    operator matrix&() { return transpose(); }
protected:
    auto transpose() -> matrix & { 
        /* returning the matrix  */
    }
};

写一篇短文。@PasserBy:对
std::bitset
的引用是什么?我真的看不出有什么关联。你可以使用
transpose()
be
matrix&
的返回类型,并返回
*这个
@DevSolar只是我想到的标准库中的第一个代理,它不是来自
std::vector
,作为一个例子。一般来说,不清楚。
matrix::transpose
是要修改原始的
matrix
,还是返回一个新的转置矩阵(正如您的代码示例所示)?或者
matrix::transpose
是否可以返回引用原始矩阵数据的新矩阵,而不是保存其自身的副本?这对你的起点有很大影响…哦,我明白了。是的,我确实像(I,j)一样实现它。顺便说一句,这个提示实际上是可行的。我现在就在纸上试一试。。非常感谢!