我按照node.js的指示实施工厂包装的物品
到目前为止它的作用。但是我没有工作的是没有返回值的函数
即:(链接中示例的扩展)
在myObject.h
:
tpl->PrototypeTemplate()->Set(String::NewSymbol("some"),
FunctionTemplate::New(something)->GetFunction());
static void something (const v8::Arguments& args);
并在myObject.cc
void MyObject::something(const Arguments& args) {
.. something without return value ...
}
不起作用。为什么呢?
我收到以下错误:
error: invalid conversion from ‘void (*)(const v8::Arguments&)’ to ‘v8::InvocationCallback {aka v8::Handle<v8::Value> (*)(const v8::Arguments&)}’ [-fpermissive]
error: initializing argument 1 of ‘static v8::Local<v8::FunctionTemplate> v8::FunctionTemplate::New(v8::InvocationCallback, v8::Handle<v8::Value>, v8::Handle<v8::Signature>)’ [-fpermissive]
我真的需要一个返回值吗?我的意思是我可以返回null并忽略它,不是问题,但这不是一个很好的解决方案。
答案 0 :(得分:1)
错误是因为FunctionTemplate::New()
需要InvocationCallback
,其return
类型为Handle<Value>
。
所以,你必须return
一些东西,但它可以只是Undefined()
:
Handle<Value> MyObject::something(const Arguments& args) {
HandleScope scope;
return scope.Close(Undefined());
}
这相当于:
function something() {}
其中包含隐式return;
(或return undefined;
)。