1

我按照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 并忽略它,这不是问题,但这不是一个很好的解决方案。

4

1 回答 1

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;)。

于 2013-08-07T08:02:48.900 回答