パラメータが行の先頭にあるマクロ (またはこれに対する回避策) を定義するにはどうすればよいですか?
#define SINGLETON_IMPLEMENTATION(className) \
##className* ##className::instance_ = NULL;
これにより、コンパイラの警告が表示されます (GCC 3.2.3): " '##' cannot appear at either end of a macro Expansion"
パラメータを別の文字列に追加するには、## のみが必要です。マクロは次のように再キャストできます
#define SINGLETON_IMPLEMENTATION(className) \
className* className::instance_ = NULL;
##
連結演算子です。コンパイラはそれについて不平を言っているだけです。
トークンの前に何かがない場合、つまりマクロ展開の開始時にトークンを連結することはできません。##
2 行目の先頭にあるを削除してみてください。
また、2番目##
は間違っているようです。シングルトン ポインターを初期化するだけの場合は##
、マクロから両方の を削除します。