パラメータが行の先頭にあるマクロを定義するにはどうすればよいですか?C++でのマクロ展開
#define SINGLETON_IMPLEMENTATION(className) \
##className* ##className::instance_ = NULL;
これは警告をコンパイラに与える(GCC 3.2.3):
パラメータが行の先頭にあるマクロを定義するにはどうすればよいですか?C++でのマクロ展開
#define SINGLETON_IMPLEMENTATION(className) \
##className* ##className::instance_ = NULL;
これは警告をコンパイラに与える(GCC 3.2.3):
##
は連結演算子である「『##』、マクロ展開のいずれかの端部に表示されません」。コンパイラはただそれについて不平を言っています。
トークンの前に、つまりマクロ展開の開始時にトークンを連結することはできません。 2行目の先頭にある##
を削除してください。
また、第2の##
も間違っています。シングルトンポインタを初期化するだけの場合は、マクロから##
を削除してください。
他の文字列にパラメータを追加するには##が必要です。あなたのマクロは、
#define SINGLETON_IMPLEMENTATION(className) \
className* className::instance_ = NULL;
のように再作成することができます - むしろ恥ずかしい...これは私を狂ったように運転していました! –