Что такое внутренний счетчик полей и для чего используется SetInternalFieldCount?

У меня проблемы с пониманием того, что SetInternalFieldCount() функция на самом деле делает. в документация v8 функция описывается как установка «количества внутренних полей для объектов, сгенерированных из этого шаблона». Что довольно понятно и не освещает.

в Руководство по внедрению v8 они дают этот пример

point_templ->SetInternalFieldCount(1);

и сказать: «Здесь счетчик внутренних полей установлен в 1, что означает, что объект имеет одно внутреннее поле с индексом 0, который указывает на объект C ++».

Но что именно является внутренним полем и что на самом деле говорит установка этого значения программе?

26

Решение

функция 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
}
23

Другие решения

От v8.h:

/**
* Sets the number of internal fields for objects generated from
* this template.
*/
void SetInternalFieldCount(int value);

Если у вас есть класс с 5 членами данных, то вы должны установить SetInternalFieldCount равным 5.

class MyObject: public node::ObjectWrap {
public:
int i;
int j;
int n;
int z;
int w;
}
-5

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector