C ++类接口传递给另一个成员变量

时间:2013-08-15 02:34:35

标签: c++ class reference

假设我有一个类Param定义如下:

class Param {
public:
    std::vector<double> lb;
    std::vector<double> mid;
    std::vector<double> ub;
    int level;
};

此类的目的是定义下限和上限(分别为lbub)和不同参数的中点估计。假设对于给定对象,lbmidub具有相同数量的元素。

现在,如果level<0,我想使用lb估算值。如果level==0,我想使用mid估算值。否则(如果level>0),我想使用ub估算值。

我的问题是:我如何创建一个单独的成员函数(或类似于引用成员变量的东西),它将根据以下内容自动“传递”到相应的成员std::vector<double> level的价值?

例如,如果我有一个功能

void f(const std::vector<double>& X);

void g(std::vector<double>& X);

我希望能够做到这样的事情:

Param myParam;
// set values of myParam.lb, myParam.mid, and myParam.ub, and myParam.level
f(myParam.__?__);
g(myParam.__?__);

2 个答案:

答案 0 :(得分:2)

您可以将强制转换操作符添加到您的班级:

class Param {
    //...

    operator std::vector<double>& () {
        if( level < 0 ) return lb;
        if( level > 0 ) return ub;
        return mid;
    }

    operator const std::vector<double>& () const {
        if( level < 0 ) return lb;
        if( level > 0 ) return ub;
        return mid;
    }
};

现在你可以这样打电话:

f(myParam);
g(myParam);

答案 1 :(得分:0)

非常简单。

std::vector< double > & getBound() {
    if ( level < 0 ) return lb;
    if ( level == 0 ) return mid;
    return ub;
}

如果需要,添加const重载,返回const &引用。

我建议不要做比这更棘手的事情。如果你想从一个对象中获取一些东西,提到一个函数通常比定义一个函数更好,尽管没有被命名,它会自动被调用。

(注意:我在三个多小时前提交了这个,但连接困难延迟了它,因此冗余。)