gpt4 book ai didi

c++ - 组合或替换多个相似的重载

转载 作者:行者123 更新时间:2023-11-28 06:04:01 25 4
gpt4 key购买 nike

我的结构“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;
}

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

是否有更好的(更具可读性、重复性更少、更短和/或更安全)的方法?例如,使用模板或引导编译器在找不到涉及“foo”的函数时尝试用“foo.bar”替换“foo”。

最佳答案

由于您只想返回一个double(而不是任何foo),您可以定义一个转换运算符到double:

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

关于c++ - 组合或替换多个相似的重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32750432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com