2013-05-20 44 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? –