#define DEFINE_STAT(Stat) \
struct FThreadSafeStaticStat<FStat_##Stat> StatPtr_##Stat;
上記の行はUnreal 4からの抜粋であり、アンリアルフォーラムで質問することができますが、これは一般的なC++の質問であり、ここで質問する必要があると思います。
私は最初の行がマクロを定義していることを理解していますが、私はC++のプリプロセッサシェナニガンに精通していないので、そこに迷っています。バックスラッシュは、宣言が次の行に続くことを意味します。
FThreadSafeStaticStatはテンプレートに少し似ていますが、そこには#があり、C++ではこれまで見たことのない構文があります
誰かがこれが何を意味するのか教えてもらえますか? Unreal 4にアクセスできない可能性があることは理解していますが、それは単に理解できない構文です。
_##
_は、連結用のプリプロセッサ演算子です。
だからあなたが使うなら
DEFINE_STAT(foo)
コード内の任意の場所で置き換えられます
_struct FThreadSafeStaticStat<FStat_foo> StatPtr_foo;
_
コードがコンパイルされる前。
これをさらに説明するための ブログ投稿 の別の例を次に示します。
_#include <stdio.h>
#define decode(s,t,u,m,p,e,d) m ## s ## u ## t
#define begin decode(a,n,i,m,a,t,e)
int begin()
{
printf("Stumped?\n");
}
_
このプログラムは正常にコンパイルおよび実行され、次の出力を生成します。
_Stumped?
_
このコードでプリプロセッサが呼び出されると、
begin
はdecode(a,n,i,m,a,t,e)
に置き換えられますdecode(a,n,i,m,a,t,e)
は_m ## a ## i ## n
_に置き換えられますm ## a ## i ## n
_はmain
に置き換えられますしたがって、事実上、begin()
はmain()
に置き換えられます。