我正在编写一个带有接受任意长度参数的函数的 Node.js 本机模块,这与 JS 中的类似:
cb = function( )
{
// Receive arguments and do something...
}
foo = function( )
{
cb.apply({}, arguments)
}
foo([1,2,3])
foo([4])
在这里,foo
应用cb
带有任意参数的 。
根据大多数关于回调的 Node.js 文章,C++ 版本会是这样的:
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
到新数组然后将其传入。