开发者

Concatenating qt-specific keyword and macro argument with a space in between

My problem is quite simple. I want the following macro

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

to expand PROXYPASS(clientAdded, Client*) to:

void MyClass::sl_clientAdded(Client* _param) { \
    emit clientAdded(_param); \
}

but since it ain't working i.e. it still shows just sl_name instead of sl_clientAdded. So, this is what I'm using:

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

It works fine, other than the fact that it expands to:

void MyClass::sl_clientAdded(Client* _param) { \
    emitclientAdded(_param); \
}

Everything is fine other than the fact that there is no space between emit and clientAdded i.e. it expands to emitclientAdded instead of emit clientAdded. So how do I go about doing it? Is there a way开发者_如何转开发 to add spaces, or must I look for another way. A lot of googling has got my hopes down due to the following statement: Whether it [gcc pre-processor] puts white space between the tokens is undefined.

My other failed attempts include

emit ## ## name(_param);
emit ## /* */ ## name(_param);
emit ## \ ## name(_param);
emit /* */ ## name(_param);
emit ## space ## name(_param); [#define space \ ]

Any help is greatly appreciated.

NOTE: Preprocessor output and macro expansion checked using gcc -E myclass.cpp.


Just put nothing there, you don't need to concatenate anything:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜