2013-08-07 110 views
1

我按照node.js的說明實現了工廠包裝對象。
到目前爲止它的工作。但是我沒有得到的是一個沒有返回值的函數。
即:(例子中的延伸中的鏈接)
myObject.hnodejs:無返回值的函數模​​板

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] 

我真的需要一個返回值?我的意思是我coud返回null並忽略它,不是一個問題,但那不是一個很好的解決方案。

回答

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

+0

感謝您的澄清。 – baam