Моя проблема довольно проста. Я хочу следующий макрос
#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
.