2013-05-20 101 views
4

我有一个矢量std::vector<std::string> path,我想复制它到一个v8 array并从我的函数返回它。如何填充v8数组?

我试图创建一个新的阵列

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

,并把该值从pathresult,但没有运气。我也尝试了几种变化

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

没有成功。

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

如何填充v8阵列?

回答

7

直接来自Embedder's Guide的此示例看起来非常接近您想要的 - 用新的String对象替换新的Integer对象。

// 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; 

不创建一个新的阵列 - 这只会造成以后可以用数组填充句柄。

+1

Array :: New现在需要传入隔离指针作为第一个参数:Isolate * isolate = args.GetIsolate();处理 array = Array :: New(isolate,3); – HeadCode

+0

如何创建这种类型的二维数组?像这样的东西v8 ::本地结果=新(v.size()); 但是2d? –