【发布时间】:2015-08-24 10:11:07
【问题描述】:
请注意 C++03!任何 C++11 解决方案都不适合我,但只是为了知识而发布它们。
我知道预处理器可以做以下事情:
#define FOO 4
#if FOO == 4
cout<<"hi"<<endl;
#endif
我需要的是:
#define BAR(X)\
#if X == 4\
cout<<"hi"<<endl;\
#endif
main.cpp
BAR(4)
我不明白为什么所有需要的信息都不会在预处理器时间内可用。
那么,请告诉我如何实现这种行为。
编辑 1: 正常的 if 条件不适用于我的情况,因为我也会做以下事情:
#define BAR(X)\
#if X == 4\
int poop;
#elif
double poop;
#endif
【问题讨论】:
-
您可能想要显示更多代码/您正在尝试做的事情。根据您提供的代码示例,我想我可能会建议为此部分使用模板而不是提供纯宏解决方案?取决于它会使其他事情变得多么复杂。
-
这不起作用,您实际上是在尝试在运行时评估预处理器指令。
-
@ChristianKiewiet 不正确。在 main 中,调用是“BAR(4)”,它在编译时间之前非常明显地完全是静态的 - 无类型的。
-
从您的第一次编辑到您的问题,这不是诀窍吗?
template<int> struct BAR { typedef double T; }; template<> struct BAR<4> { typedef int T; }; BAR<4>::T intPoop; BAR<1>::T doublePoop; -
@πάνταῥεῖ:什么?完全废话。在这里,你又在欺骗自己再次。我重新提出了这个问题,因为你完全错了。
BAR(i)和BAR(4)是完全不同的用例。
标签: c++ if-statement c-preprocessor c++03