Comment définir une macro qui définit une fonction qui s'appelle elle-même?

Je veux faire une macro qui permet de définir une fonction qui appelle cette fonction sur une liste d'objets. Il ne doit pas nécessairement être un pré-processeur de macro, mais il devrait fonctionner.

Je veux écrire quelque chose comme ceci:

CALL_ON_ALL(doSomething(int arg1, bool arg2))

Et je veux qu'il à le produire:

void doSomething(int arg1, bool arg2) {
    for (int i = 0; i < delegates.size(); i++)
        delegates[i]->doSomething(arg1, arg2);
}

J'ai quelque chose qui fonctionne:

#define CALL_ON_ALL(defSig, callSig) \
void defSig { \
    for (int i = 0; i < delegates.size(); i++) \
        delegates[i]->callSig; \
}

Le problème est que je dois écrire la définition de la signature et de l'appel de la signature séparément comme ceci:

CALL_ON_ALL(doSomething(int arg1, bool arg2), doSomething(arg1, arg2))

Est-il une meilleure façon de le faire?

MODIFIER

Il ne doit pas nécessairement être un pré-processeur de macro. Tout ce qui fonctionne le fera.

Regardez comment CxxTest-t-il pour les objets fantaisie.
Yep, mais je doute qu'il peut être aidé.
Retrait c balise, puis. Aussi, veuillez utiliser @ notification de la syntaxe.
J'ai eu ce problème avant, et n'a trouvé aucune façon de la contourner. 🙁 Macros ne sont tout simplement pas assez puissant pour ce genre de chose.
Oh, variadic templates sera certainement résoudre ce! Mais... c'est pas avec des macros.

OriginalL'auteur Tim Mahoney | 2013-01-05