什么是内部字段数,SetInternalFieldCount用于什么?

时间:2013-05-17 03:02:36

标签: c++ v8 embedded-v8

我无法理解SetInternalFieldCount()函数实际上做了什么。在v8 documentation中,该函数被描述为设置“从该模板生成的对象的内部字段数”。这是非常自我解释和无意义的。

v8 embedder's guide中他们给出了这个例子

point_templ->SetInternalFieldCount(1); 

并说“这里内部字段数设置为1,这意味着该对象有一个内部字段,索引为0,指向C ++对象。”

但究竟什么是内部字段以及设置此值实际上告诉程序的是什么?

2 个答案:

答案 0 :(得分:23)

函数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
}

答案 1 :(得分:-6)

来自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;
}