这个问题在这里已有答案:
嗨,我目前正在尝试为矩阵实现模板库,所以我正在实现一些像transpose()操作这样的操作。
我还希望运算符返回的矩阵(如转置)与原始矩阵共享数据。
例:
matrix <int> x(3,3);
x.transpose() [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};
}
...
};
如果你从头开始实现一个矩阵,我不明白为什么[i][j]
语法应该优于(i, j)
,这更容易实现。
我认为你可以使用铸造操作员。一个简单的样本可能是:
class x {
public:
operator matrix&() { return transpose(); }
protected:
auto transpose() -> matrix & {
/* returning the matrix */
}
};