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