2009-03-23 9 views
1

Comment puis-je définir une macro (ou une solution de contournement pour cela) où le paramètre se trouve au début de la ligne?Extension de macro en C++

#define SINGLETON_IMPLEMENTATION(className) \ 
    ##className* ##className::instance_ = NULL; 

Cela donne un avertissement compilateur (GCC 3.2.3): " '##' ne peut pas apparaître à chaque extrémité d'une expansion macro"

Répondre

6

## est l'opérateur de concaténation; le compilateur se plaint juste à ce sujet.
Vous ne pouvez pas concaténer un jeton sans quelque chose avant, c'est-à-dire au début de la macro-expansion; essayez simplement d'enlever le ## au début de la deuxième ligne. Le deuxième ## semble faux. Si vous voulez simplement initialiser un pointeur singleton, supprimez les deux ## de votre macro.

12

Vous n'avez besoin que de ## pour ajouter un paramètre à une autre chaîne. Votre macro peut être refondue comme

#define SINGLETON_IMPLEMENTATION(className) \ 
    className* className::instance_ = NULL; 
+0

ah bien sûr - plutôt embarrassant ... cela me rendait fou! –