c++ - 什么是内部字段计数以及 SetInternalFieldCount 用于什么?

标签 c++ v8 embedded-v8

我无法理解 SetInternalFieldCount() 函数的实际作用。在 v8 documentation该功能被描述为设置“从该模板生成的对象的内部字段数”。这是非常不言自明且没有启发性的。

v8 embedder's guide他们举了这个例子

point_templ->SetInternalFieldCount(1); 

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

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

最佳答案

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

关于c++ - 什么是内部字段计数以及 SetInternalFieldCount 用于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16600735/

相关文章:

c++ - 自定义 QAbstractItemModel 和 QTableView 中的错误选择

c++ - 分析和排序足球联赛球队 C++

c++ - 我可以读取任何内存值吗

javascript - Undersore 的 _.now 如何运作?

node.js - Google Cloud Services 中 f1 微型实例中 node.js 进程的进程内存限制?

c++ - 用于测量 GC 事件的 V8 垃圾收集器回调

c++ - 指针可以指向4GB之后的地址吗?

javascript - Chrome-Javascript : Negative Exponent Calculation is wrong for > -3

C++ 作用域和 Google V8 脚本上下文

javascript - 访问V8引擎的抽象语法树