2011-12-17 13 views
3

Java、JavaScript、Pythonの長年にわたり、私はC++を忘れているだけでなく、その構文を混同しています。このC++スニペットの構文は何ですか?

http://heavycoder.com/tutorials/lua_embed.php

static const luaL_reg lualibs[] = 
{ 
     { "base",  luaopen_base }, 
     { NULL,   NULL } 
}; 

lualibsは、2Dアレイとのinit? luaL_regは、迅速なGoogle検索はそれについて上がって何をされるタイプであるが、明らかに配列でない、

const luaL_reg *lib; 

for (lib = lualibs; lib->func != NULL; lib++) 
{ 
    lib->func(l); 
    lua_settop(l, 0); 
} 

答えて

2

luaL_regはおそらく次のようになります。

typedef struct luaL_reg_t { 
    char const * const name; 
    void(*func)(< type_of_<l> >); 
} luaL_reg; 

オブジェクトのメンバは、my_functionのアドレスを有すること"hello world"funcの位置に向かって指すように部材nameをセットする以下の例のように{}を使用して設定することができます。

luaL_reg obj = {"hello world", my_function}; 

アレイのメンバーを初期化するとき、以前のスニペットに示されている構文を使用することもできます。以下のスニペットでは、const luaL_regインスタンスの配列は2つのオブジェクトを含むように設定されています。最初はname = "base"funcluaopen_baseに設定されています。

物事を明確にする。以下はであり、の2D配列ですが、の配列は{}を使用して初期化され、各インスタンスのメンバーが設定されています。

static const luaL_reg lualibs[] = 
{ 
    { "base",  luaopen_base }, 
    { NULL,   NULL } 
}; 

最後の要素は、私たちの配列を反復処理簡素化するために使用され、NULLに両方のメンバーを設定すると、我々は最後の要素に達したときに表示することが容易になります。

次のスニペットのループは、これを利用しています。メンバーfuncNULLと等しくない限り、配列の最後には達していません。

for (lib = lualibs; lib->func != NULL; lib++) { 
    lib->func(l); 
    lua_settop(l, 0); 
} 
2

luaL_regは2つの要素、thisstructです。

  • 最初struct 2つの値で初期化される:

    最初のスニペットはluaL_regstructの配列を作成して{ NULL, NULL }

  • { "base", luaopen_base }
  • は、アレイ内の第二luaL_regstructは次のように設定されています

ボトムライン、ではない 2次元配列、 structsの配列であり、各structには2つの要素が含まれています。

ここで、2番目の例は、かなり自明です。 libは、luaL_regstructへのポインタです。

関連する問題