内部フィールドカウントとは何ですか? SetInternalFieldCount は何に使用されますか? 質問する

内部フィールドカウントとは何ですか? SetInternalFieldCount は何に使用されますか? 質問する

この関数が実際に何をするのか理解できませんSetInternalFieldCount()v8 ドキュメントこの関数は、「このテンプレートから生成されたオブジェクトの内部フィールドの数」を設定するものとして説明されています。これは、非常に自明であり、わかりにくいものです。

の中にv8 埋め込みガイド彼らはこの例を挙げている

point_templ->SetInternalFieldCount(1); 

そして、「ここでは内部フィールドのカウントが 1 に設定されています。これは、オブジェクトに C++ オブジェクトを指すインデックス 0 の内部フィールドが 1 つあることを意味します。」と言います。

しかし、内部フィールドとは正確には何であり、この値を設定すると実際にプログラムに何が伝えられるのでしょうか?

ベストアンサー1

関数はSetInternalFieldCount、テンプレートを使用して作成されたすべてのインスタンスに内部ストレージ スロットを割り当てるように V8 に指示します。これにより、インスタンス内にあらゆる種類の情報を保存できます。

たとえば、V8 オブジェクトと C++ クラス インスタンス間の接続を保存する場合に便利です。

void* p;  // any pointer
Local<Object> obj = point_templ->NewInstance();
obj->SetInternalField(0, External::New(p));      // 0 means 1-st internal field

または整列ポインタの場合:

obj->SetAlignedPointerInInternalField(0, p);     // 0 means 1-st internal field

この後、プログラムの別の部分で次のようにポインターを取得できます。

v8::Handle<v8::Object> handle;    // some object handle
if (handle->InternalFieldCount() > 0)
{
    void* p = handle->GetAlignedPointerFromInternalField(0); // from 1-st field
    // ... do something with p, e.g. cast it to wrapped C++ class instance
}

おすすめ記事