假设我有一个类Param
定义如下:
class Param {
public:
std::vector<double> lb;
std::vector<double> mid;
std::vector<double> ub;
int level;
};
此类的目的是定义下限和上限(分别为lb
和ub
)和不同参数的中点估计。假设对于给定对象,lb
,mid
和ub
具有相同数量的元素。
现在,如果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.__?__);
答案 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 &
引用。
我建议不要做比这更棘手的事情。如果你想从一个对象中获取一些东西,提到一个函数通常比定义一个函数更好,尽管没有被命名,它会自动被调用。
(注意:我在三个多小时前提交了这个,但连接困难延迟了它,因此冗余。)