8

我有一个向量std::vector<std::string> path,我想将它复制到一个v8 数组并从我的函数中返回它。

我试过创建一个新数组

v8::Handle<v8::Array> result;

并将值path放入result但没有运气。我也尝试了几种变体

return scope.Close(v8::Array::New(/* I've tried many things in here */));

没有成功。

是一个类似的问题,但我似乎无法复制结果。

你如何填充 v8 数组?

4

2 回答 2

10

这个直接来自Embedder's Guide 的示例似乎非常接近您想要的 - 用新Integer对象替换新String对象。

// This function returns a new array with three elements, x, y, and z.
Handle<Array> NewPointArray(int x, int y, int z) {

  // We will be creating temporary handles so we use a handle scope.
  HandleScope handle_scope;

  // Create a new empty array.
  Handle<Array> array = Array::New(3);

  // Return an empty result if there was an error creating the array.
  if (array.IsEmpty())
    return Handle<Array>();

  // Fill out the values
  array->Set(0, Integer::New(x));
  array->Set(1, Integer::New(y));
  array->Set(2, Integer::New(z));

  // Return the value through Close.
  return handle_scope.Close(array);
}

我已经阅读了 Local 和 Persistent 句柄的语义,因为我认为这就是你陷入困境的地方。

这一行:

v8::Handle<v8::Array> result;

不创建新数组 - 它只创建一个以后可以用数组填充的句柄。

于 2013-05-20T06:29:22.017 回答
2

创建一个新数组

    Handle<Array>postOrder = Array::New(isolate,5);
    //New takes two argument 1st one should be isolate and second one should 
    //be the number 

在 v8::array 中设置元素

    int elem = 101; // this could be a premitive data type, array or vector or list 
    for(int i=0;i<10;i++) {
      postOrder->Set(i++,Number::New(isolate,elem));
    } 

从 v8::array 获取元素

    for(int i=0; i<postOrder->Length();i++){
       double val = postOrder->Get(i)->NumberValue()
    }

    //Type conversion is important in v8 to c++ back and forth; there is good library for data structure conversion; **V8pp Header only Librabry**

谢谢!!

于 2018-04-21T05:20:48.013 回答