我可以有条件地替换预处理器参数吗?

MSa*_*ers 6 c c++ c-preprocessor

使用单元测试框架,我遇到了一个我想测试宏参数的情况.简单地说,我想扩展宏观FOO(x),这FOO(int)将是shortFOO(anything_else)将来的long.

使用C++模板,当然这不是问题.但在这里我需要一个真正的令牌替代品,而不仅仅是一个typedef.即FOO(char) FOO(char) i;应该是一个有效的定义等于long long i;.

Raf*_*sta 0

你想做的事是不可能的。

宏由 c 预处理器计算,顾名思义,它在编译器运行之前运行。它还不知道你的符号是什么类型。

为什么不为该类型创建一个类,在编译器评估该类型时将其自身转换为正确的内容。