c++ - 使用 C++ 宏进行条件替换?
问题描述
对于struct point{float x,y,z;},
我想定义许多函数,在每个函数中,我对x
,y
和做同样的事情z
。例如float size = 1 * x*y*z
,float edge = 0+x+y+z
...所以我想知道,我可以写一个宏,或者类似的东西,
#define forxyz(codes) ???????
当我写
forxyz(res=res+d;)
它调用时res=res+x; res=res+y;res=res+z;
Urrr,让我说得更清楚。我有大约 20 个函数,每个函数只调用一次,所以我不想将它们附加到结构中。而且,它并不像'+'那么简单。例如,我可能有
x_in_middle(point a, point b, point c, float d){
if(b.x<a.x && a.x<c.x){
if(d>0) return a.x;
if(d<0) return a.x*a.x;
if(d==0) return 0;
}
}
我正在想办法不写
if(b.x<a.x && a.x<c.x){
if(d>0) return a.x;
if(d<0) return a.x*a.x;
if(d=0) return 0;
}
三次!
在这种情况下res=res+d
很简单,但在我的情况下,它可能是几行代码......有时我想调用set_x, set_y, set_z
函数......
到目前为止,我最好的主意是制作res=res+d
另一个宏,即
#define add(d) res=res+d
然后
add(x);
add(y);
add(z);
但这显然会创建太多宏,而且我认为这并不优雅......
解决方案
point
一个简单的方法是编写一个以s 为参数的独立函数:
point add(const point& a, const point& b)
{
point c;
c.x = a.x + b.x;
c.y = a.y + b.y;
c.z = a.z + b.z;
return c;
}
你会这样使用:
point a, b, c;
//...
c = add(a, b);
你也可以重载operator +
:
point operator+(const point& a, const point& b)
{
point c;
c.x = a.x + b.x;
c.y = a.y + b.y;
c.z = a.z + b.z;
return c;
}
您的用法可能如下所示:
point a, b, c;
//...
c = a + b;
推荐阅读
- android - 使用 WebVTTT 或 JSON 使用 Exo 播放器添加 Storyboards/Trickplay
- java - 在springboot中检测getobjectsize
- timezone - 获取某个位置的历史时区信息
- django - Django 将不需要的字符附加到 Imagefield 名称属性
- javascript - 防止组内的文本在fabricjs中调整组大小时被拉伸?
- javascript - display next weekday only after asking
- java - Java Swing 如何正确使用 GridBagLayout 和 GridBagConstraints?
- java - 如何检测Java输入中有字符串?
- node.js - 如何将数据保存到用户历史记录
- python-3.x - 如何解码接收到的数据 b'\x89A\....'