C ++将类成员动态定义为对象或对另一个成员的引用

时间:2012-11-15 00:51:43

标签: c++ pointers dynamic reference constructor

假设我有一个课程如下:

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进行操作。

我该怎么做?

1 个答案:

答案 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始终使用相同的引用,但您可以控制此引用引用的数据。请注意,xy现在是私有的 - 这可确保这些成员仅通过function()方法在本地使用。