无法弄清楚这是怎么回事。这是我想要做的一个例子。传递参数时出现宏展开问题
class WhatThe
{
public:
WhatThe(std::string Type, int channel) {}
~WhatThe() {}
void Doitnow() {}
};
#define DO_SOMETHING_TEST1 WhatThe("TEST1", channel)
#define DO_SOMETHING_TEST2 WhatThe("TEST2", channel)
#define DO_IT(type, channel) \
DO_SOMETHING_##type.Doitnow()
然后调用
DO_IT(TEST1,1);
我得到一个 - 错误:“通道”在此范围
未声明是我甚至可以做的,你可以有内宏宏并通过它们传递参数?我本来以为
DO_SOMETHING_##type.Doitnow()
最终将会扩展到
WhatThe("TEST1", 1).DoitNow()
究竟是什么,你正在努力实现(部分来自使得代码一个痛苦的调试)吗? – 2013-04-04 06:43:32
我只是想了解更多关于宏扩展的内容,结构来自g2log [link](https://sites.google.com/site/kjellhedstrom2/g2log-efficient-background-io-processign-with- c11)在g2log.h中。我相信他有这样做的很好的理由。 – James 2013-04-04 06:59:28
请注意,许多(如果不是全部的话)编译器提供了一个选项,将预处理器的结果写入文件。例如在Visual Studio中,您可以在项目属性/配置属性/ C/C++ /预处理器/预处理到文件中找到它。对于gcc和g ++,这是-E选项。 – TobiMcNamobi 2013-04-04 07:11:45