我的问题很简单。我想要以下宏
#define PROXYPASS(name, param) \
void MyClass::sl_name(param _param) { \
emit name(_param); \
}
将PROXYPASS(clientAdded, Client*)
扩展为:
void MyClass::sl_clientAdded(Client* _param) { \
emit clientAdded(_param); \
}
但由于它不起作用,它仍然只显示sl_name
而不是sl_clientAdded
。所以,这就是我正在使用的:
#define PROXYPASS(name, param) \
void MyClass::sl_ ## name(param _param) { \
emit ## name(_param); \
}
除了扩展为:
这一事实外,它的工作正常void MyClass::sl_clientAdded(Client* _param) { \
emitclientAdded(_param); \
}
除了emit
和clientAdded
之间没有空格,即它扩展为emitclientAdded
而不是emit clientAdded
之外,一切都很好。那我该怎么做呢?有没有办法添加空格,或者我必须寻找其他方式。由于以下声明,很多谷歌搜索引起了我的希望:是否[gcc预处理器]在令牌之间放置空格是未定义的。
我的其他失败尝试包括
emit ## ## name(_param);
emit ## /* */ ## name(_param);
emit ## \ ## name(_param);
emit /* */ ## name(_param);
emit ## space ## name(_param); [#define space \ ]
非常感谢任何帮助。
注意:使用gcc -E myclass.cpp
检查预处理器输出和宏扩展。
答案 0 :(得分:0)
不要在那里放任何东西,你不需要连接任何东西:
#define PROXYPASS(name, param) \
void MyClass::sl_ ## name(param _param) { \
emit name(_param); \
}