组合或替换多个类似的重载

时间:2015-09-23 22:17:26

标签: c++ templates operator-overloading

我有很多成员的结构“foo”,其中一个(双栏)在基本操作中被多次访问。因此,而不是写作,例如:

double a=foo.bar+3;
double b=foo.bar*5;
bool c=foo.bar==2;

我想写:

double a=foo+3;
double b=foo*5;
bool c=foo==2;

一种方法是在自由函数中重载所有所需的运算符:

template< class T>
double operator@(foo a,T b){
    return a.bar@b;
}
template< class T>
double operator@(T b,foo a){
    return a.bar@b;
}

然后,我必须复制并粘贴此代码段并替换@ by +,*,==和我想要的其他操作。

是否有更好的(更易阅读,更少重复,更短和/或更安全)的方式?例如,使用模板或指导编译器尝试用“foo.bar”替换“foo”,只要它找不到涉及“foo”的函数的匹配。

1 个答案:

答案 0 :(得分:1)

由于您只想获得double(而不是foo),您只需将转化运算符定义为double

struct foo {
    double bar;
    operator double() const { return this->bar; }
};