2009-03-23 40 views
1

パラメータが行の先頭にあるマクロを定義するにはどうすればよいですか?C++でのマクロ展開

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

これは警告をコンパイラに与える(GCC 3.2.3):

答えて

6

##は連結演算子である「『##』、マクロ展開のいずれかの端部に表示されません」。コンパイラはただそれについて不平を言っています。
トークンの前に、つまりマクロ展開の開始時にトークンを連結することはできません。 2行目の先頭にある##を削除してください。
また、第2の##も間違っています。シングルトンポインタを初期化するだけの場合は、マクロから##を削除してください。

12

他の文字列にパラメータを追加するには##が必要です。あなたのマクロは、

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

のように再作成することができます - むしろ恥ずかしい...これは私を狂ったように運転していました! –

関連する問題