我找到了一个page,它解释了如何使用c预处理器指令实现标识符 - 令牌比较。这可以通过这样的一些宏来完成:
#define COMPARE_foo(x) x
#define COMPARE_bar(x) x
#define PRIMITIVE_COMPARE(x, y) IS_PAREN \
( \
COMPARE_ ## x ( COMPARE_ ## y) (()) \
)
PRIMITIVE_COMPARE(foo, bar) // expands to 0
PRIMITIVE_COMPARE(bar, bar) // expands to 1
哪个IS_PAREN
检查它是否完全展开(当两个宏因painting blue而不同时发生)。
现在我在Boost预处理器中寻找类似的命令。我想要一个宏的接受类型的列表,如果宏调用这种类型的宏,它扩展到它必须的,否则它什么都没有。我的伪代码是这样的:
#define ACCEPTED_TYPE (float)(int)(string)
#define Macro(x) // If one of accepted type do a otherwise do nothing
如果boost预处理器没有确切的解决方案,那么您的建议是什么,以使实现更容易。