2

假设我有一个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.__?__);
4

2 回答 2

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);
于 2013-08-15T02:44:14.823 回答
0

非常简单。

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

如有必要,添加一个const返回引用的重载。const &

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

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

于 2013-08-15T06:38:43.060 回答