【发布时间】:2014-06-21 12:31:10
【问题描述】:
C 预处理器不能用于重载运算符,因为它不知道表达式“a+b”中 a 和 b 的类型,请参阅this question。
但是,给它一个类型怎么样,像这样:
out = (a*b+b*n) x c : {a,b,c->vector3, n->float};
将被预处理为:
vector3 out = cross(add(dot(a,b), mult(b,n)),c);
这个解决方法,在将代码库迁移到 C++ 或连接 C 和 C++ 时很有用,不值得麻烦,同样冗长。但是, : 左边的表达式更容易阅读。
这样的解决方案可行吗?
【问题讨论】:
-
这将被预处理......通过什么?
-
一些宏,希望不会太难写。
-
我真的很怀疑除了实验/代码混淆区域之外的某个地方会接受这样的事情。想想调试这样的东西头疼 - 矫枉过正
-
瞄准自制的半生不熟的宏处理器,还是瞄准像 C++ 这样的真实语言?这是一个艰难的困境......
-
@n.m:你这里没有发明的权利是一种常见病。但是在我的例子中,C++ 带来了可移植性问题。不,我不会尝试任何花哨的元编程,只需使用详细的方式就可以了。这让我更了解宏的能力。
标签: c macros operator-overloading