0
我正在寫與接受任意長度參數的函數使Node.js的本機模塊,它是與此相似的JS:如何使用v8 :: Arguments應用回調?
cb = function()
{
// Receive arguments and do something...
}
foo = function()
{
cb.apply({}, arguments)
}
foo([1,2,3])
foo([4])
這裏,foo
應用cb
任意參數。
而C++版本,根據有關回調最Node.js的文章,想這樣:
Handle<Value> Foo(const Arguments& args)
{
HandleScope scope;
// Assume that we can get callback from somewhere else.
Local<Function> cb = getExistingCallback();
// Now call it with arbitrary arguments.
cb->Call(Object::New(), args.Length(), args.Data());
return scope.Close(Undefined());
}
但Arguments::Data
只能提供v8::Local<v8::Value>&
, 不v8::Handle<v8::Value>*
,所以編譯器會引發錯誤。
因爲Local
派生自Handle
,所以不是問題所在。我只是不,如果有任何解決方案,我可以用來避免將所有成員從Data
複製到一個新的陣列,然後通過它。
謝謝。複製循環是我所擔心的,因爲它會在每次應用回調時執行,即使函數已經包含了「參數」中的所有信息。但如果這是做到這一點的唯一方法,我會服從。 – snowmantw 2013-04-11 05:36:06
'class Handle'中的唯一數據成員是'T *',所以它應該和複製指針沒有區別,所以我不擔心它的性能。如果你想避免多次分配,你當然也可以調用'argv.reserve(argc)'。 –
loganfsmyth
2013-04-11 05:40:38