我想创建一个宏,该宏将定义一个在对象列表上调用该函数的函数。它不一定必须是预处理器宏,但它应该可以工作。
我想写这样的东西:

CALL_ON_ALL(doSomething(int arg1, bool arg2))
我希望它产生以下结果:
void doSomething(int arg1, bool arg2) {
    for (int i = 0; i < delegates.size(); i++)
        delegates[i]->doSomething(arg1, arg2);
}

我有一些有效的方法:
#define CALL_ON_ALL(defSig, callSig) \
void defSig { \
    for (int i = 0; i < delegates.size(); i++) \
        delegates[i]->callSig; \
}
问题是我必须像这样分别编写定义签名和调用签名:
CALL_ON_ALL(doSomething(int arg1, bool arg2), doSomething(arg1, arg2))
有一个更好的方法吗?
编辑
它不一定必须是预处理程序宏。任何可行的方法都可以。

最佳答案

尝试使用单独的参数(对于两个参数)进行签名:

#define CALL_ON_ALL2(name, argType1, argName1, argType2, argName2) \
void name( argType1 argName1 , argType2 argName2 ) { \
    for (int i = 0; i < delegates.size(); i++) \
        delegates[0]->name( argName1 , argName2 ); \
}

您可以将其复制为其他参数编号。

10-06 11:16