假设我有一个课程如下:
class Solution {
public:
std::vector<double> x;
}
假设我有如下函数:
void function(Solution& sol) {
// do some calculations on the solution vector
}
在某些情况下,我希望function
直接使用向量x
执行计算。但是,在某些情况下,我会想要使用另一个向量来执行计算,该向量是由向量x
的映射生成的。
考虑到这些可能的情况,在课程Solution
中引入其他成员是有意义的,但在第一种情况下,这位额外的成员只会引用x
,而在第二种情况下,此附加成员成员本身就是另一个std::vector
,由某种形式的映射决定。
因此,理想情况下,我可以向Solution
添加一个ctor,用于创建/定义名为y
的成员作为std::vector
或仅作为x
的引用。然后,我的function
可以直接使用y
进行操作。
我该怎么做?
答案 0 :(得分:4)
您可以将您的功能定义为:
void function(std::vector<double>& x)
并根据情况传递不同的向量
修改使用ctors中的引用
class Solution
{
std::vector<double> x;
std::vector<double>& y;
public:
Solution(std::vector<double>& _y) : y(_y) { }
Solution() : y(x) { }
void function() { /* do work on y*/ }
};
这样,您的function
始终使用相同的引用,但您可以控制此引用引用的数据。请注意,x
和y
现在是私有的 - 这可确保这些成员仅通过function()
方法在本地使用。