【发布时间】:2013-12-02 03:12:25
【问题描述】:
(Overload ternary ?: operator, or change to if{}else{} in included files的跟进。)
上下文
研究项目在这里。在我的 C++ 库中,我包含使用 #include "aprogram.c" 的 C 文件,我通过重载(几乎)所有运算符来象征性地执行这些文件。
我必须能够检测到(condition) ? this : that 并提取condition、this 和that 以便在我的符号执行库中使用,用于以下情况:
(a >= 0) ? a : -a
(a >= b) ? a : b
概念性问题
因为我不能重载 C++ 中的三元 ?: 运算符,而且它只适用于上述情况,所以我不能通过使用类似于以下的宏来“重载”它们:
#define TO_NEG(a) ((a >= 0) ? a : -a)
#define MAX(a,b) ((a >= b) ? a : b)
并实现 TO_NEG(a) 和 MAX(a,b)?
编辑:澄清
有了这个,我想实现我的图书馆
- 检测到?:在这两种情况下
- 将其转换为 TO_NEG 或 MAX
- 使用我为 TO_NEG 和 MAX 编写的新代码
【问题讨论】:
-
什么样的研究项目需要这个,令人难以置信。如果你想设计自己的语言,你可以为 LLVM 写一个新的前端。如果你不这样做,那么你很难理解为什么你会以如此野蛮的方式掩盖一种原本很好的语言......
-
我不太明白这个问题,但如果答案是“是的,你可以使用宏来做你想做的事”,那么你应该注意正确地为宏加上括号。例如:
#define TO_NEG(a) (((a) >= 0) (a) : -(a)) -
但是反过来不行吗?你其实很想
#define ((a >= 0) ? a : -a) TO_NEG(a),但我觉得不可能…… -
@PiotrZierhoffer 是的,这就是我想做的……如果可能的话。
标签: c++ c macros operator-overloading ternary-operator