将特定于qt的关键字和宏参数与其间的空格连接起来

时间:2010-08-08 00:21:42

标签: c++ qt concatenation c-preprocessor

我的问题很简单。我想要以下宏

#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); \
}

除了emitclientAdded之间没有空格,即它扩展为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检查预处理器输出和宏扩展。

1 个答案:

答案 0 :(得分:0)

不要在那里放任何东西,你不需要连接任何东西:

#define PROXYPASS(name, param) \
void MyClass::sl_ ## name(param _param) { \
    emit name(_param); \
}