如何声明一个可以执行赋值操作的函数? (C++)
How do I declare a function that can perform an assignment operation? (C++)
我正在尝试创建一个类似于 std::vector
中的 at()
函数的函数。我知道如何为 =
重载运算符,但这不是我所追求的。我有一个矩阵对象,我希望按照覆盖矩阵的列向量的方式执行操作,即
int rowNumber = 3; int columnNumber = 3;
Matrix myMatrix(rowNumber, columnNumber);
Vector myColumnVector(rowNumber);
myMatrix.col(2) = myColumnVector;
其中 col()
是赋值函数。我如何声明这个函数?
col()
不是赋值函数。
operator=()
是赋值函数。
col()
是评估您将分配给的事物的函数。在这种情况下,对 Vector
(即 Vector&
)的引用将完成这项工作。
您可能会使用一些代理:
struct Matrix;
struct ColWrapper
{
Matrix* mMatrix;
int mIndex;
ColWrapper& operator =(const std::vector<double>& d);
};
struct RowWrapper
{
Matrix* mMatrix;
int mIndex;
RowWrapper& operator =(const std::vector<double>& d);
};
struct Matrix
{
std::vector<double> mData;
int mRow;
Matrix(int row, int column) : mData(row * colunmn), mRow(row) {}
ColWrapper col(int index) { return {this, index}; }
RowWrapper row(int index) { return {this, index}; }
};
ColWrapper& ColWrapper::operator =(const std::vector<double>& ds)
{
auto index = mIndex * mMatrix->mRow;
for (auto d : ds) {
mMatrix->mData[index] = d;
index += 1;
}
return *this;
}
RowWrapper& RowWrapper::operator =(const std::vector<double>& ds)
{
auto index = mIndex;
for (auto d : ds) {
mMatrix->mData[index] = d;
index += mMatrix->mRow;
}
return *this;
}
我正在尝试创建一个类似于 std::vector
中的 at()
函数的函数。我知道如何为 =
重载运算符,但这不是我所追求的。我有一个矩阵对象,我希望按照覆盖矩阵的列向量的方式执行操作,即
int rowNumber = 3; int columnNumber = 3;
Matrix myMatrix(rowNumber, columnNumber);
Vector myColumnVector(rowNumber);
myMatrix.col(2) = myColumnVector;
其中 col()
是赋值函数。我如何声明这个函数?
col()
不是赋值函数。
operator=()
是赋值函数。
col()
是评估您将分配给的事物的函数。在这种情况下,对 Vector
(即 Vector&
)的引用将完成这项工作。
您可能会使用一些代理:
struct Matrix;
struct ColWrapper
{
Matrix* mMatrix;
int mIndex;
ColWrapper& operator =(const std::vector<double>& d);
};
struct RowWrapper
{
Matrix* mMatrix;
int mIndex;
RowWrapper& operator =(const std::vector<double>& d);
};
struct Matrix
{
std::vector<double> mData;
int mRow;
Matrix(int row, int column) : mData(row * colunmn), mRow(row) {}
ColWrapper col(int index) { return {this, index}; }
RowWrapper row(int index) { return {this, index}; }
};
ColWrapper& ColWrapper::operator =(const std::vector<double>& ds)
{
auto index = mIndex * mMatrix->mRow;
for (auto d : ds) {
mMatrix->mData[index] = d;
index += 1;
}
return *this;
}
RowWrapper& RowWrapper::operator =(const std::vector<double>& ds)
{
auto index = mIndex;
for (auto d : ds) {
mMatrix->mData[index] = d;
index += mMatrix->mRow;
}
return *this;
}