この関数が実際に何をするのか理解できません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
}