【发布时间】:2011-03-26 20:16:42
【问题描述】:
我的问题很简单。我想要下面的宏
#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检查预处理器输出和宏扩展。
【问题讨论】:
标签: c++ qt concatenation c-preprocessor