considérer une macro simple: ceci produit la sortie exacte que nous attendons: p> L'exemple ci-dessus fonctionne car la parenthèse adjacente à l'appel de la fonction sont reconnus par le préprocesseur. P> considère maintenant ce qui se passe si j'utilise un modèle au lieu d'un appel de fonction: p> ECHO(template<int, bool>)
3 Réponses :
ECHO((a, b))
Notez que vous avez boost_pp_comma code> si vous pouvez inclure "boost / préprocesseur / ponctuation / virult.hpp" code>. boost.org/doc/libs/1_31_0/ libs / préprocesseur / doc / ref / virt.ht ml
Si vous autorisez l'utilisation de Cog dans votre projet, votre code devient plus lisible:
/*[[[cog
# definitions ----
import declarations
# generation ---
types = ['bool' , 'std::string']
names = ['Foo' , 'Bar']
for index in range(len(names)):
AddDeclaration( 'template<int, %s>' % types[index] , names[index])
]]]*/
template<int, bool> struct Foo;
template<int, std::string> struct Bar;
//[[[end]]]
Une macro variable peut aider:
#define ECHO(x...) x ECHO(foo(1, 2)) ECHO(template<int, bool>)
Notez que cela utilise une extension GNU. La voie standard (C ++ 11) serait #define echo (...) __va_args __ code>.
Dupliqué possible de C ++ Problème macro (interprétation de la virgule,)
@Olicharlesworth Ah, je n'ai pas trouvé celui-ci dans ma recherche. La réponse ne semble pas répondre à mon problème exact, bien qu'il fournisse de la nourriture à la pensée. Merci.
Une question plus récente a de nouvelles réponses: Stackoverflow.com/ Questions / 13842468 / Comma-in-CC-Macro / ...