C++ 如何共享操作员返回的数据
您好,我目前正在尝试为矩阵实现一个模板库,所以我正在实现一些操作,比如transpose()操作 我还希望操作符返回的矩阵,如转置,与原始矩阵共享数据 例如: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 {
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()
bematrix&
的返回类型,并返回*这个@DevSolar只是我想到的标准库中的第一个代理,它不是来自std::vector
,作为一个例子。一般来说,不清楚。matrix::transpose
是要修改原始的matrix
,还是返回一个新的转置矩阵(正如您的代码示例所示)?或者matrix::transpose
是否可以返回引用原始矩阵数据的新矩阵,而不是保存其自身的副本?这对你的起点有很大影响…哦,我明白了。是的,我确实像(I,j)一样实现它。顺便说一句,这个提示实际上是可行的。我现在就在纸上试一试。。非常感谢!