如何更新我的function以使用新的v8 FunctionTemplates?
我有一些使用V8 FunctionTemplates的代码。 它是一个较老的Node.js模块的一部分,充当一个C ++库的包装器。
void NNet::PrototypeInit(Local<FunctionTemplate> t) { ... t->InstanceTemplate()->SetAccessor(Nan::New<String>("training_algorithm").ToLocalChecked(), GetTrainingAlgorithm, SetTrainingAlgorithm); t->InstanceTemplate()->SetAccessor(Nan::New<String>("learning_rate").ToLocalChecked(), GetLearningRate, SetLearningRate); t->InstanceTemplate()->SetAccessor(Nan::New<String>("learning_momentum").ToLocalChecked(), GetLearningMomentum, SetLearningMomentum); t->InstanceTemplate()->SetAccessor(Nan::New<String>("layers").ToLocalChecked(), GetLayerArray); }
但是,当代码运行时,编译器会提供这些错误。
In static member function 'static void NNet::PrototypeInit(v8::Local<v8::FunctionTemplate>)': error: invalid conversion from 'Nan::NAN_GETTER_RETURN_TYPE (*)(v8::Local<v8::String>, Nan::NAN_GETTER_ARGS_TYPE) {aka void (*)(v8::Local<v8::String>, const Nan::PropertyCallbackInfo<v8::Value>&)}' to 'v8::AccessorGetterCallback {aka void (*)(v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>&)}' [-fpermissive] t->InstanceTemplate()->SetAccessor(Nan::New<String>("training_algorithm").ToLocalChecked(), GetTrainingAlgorithm, SetTrainingAlgorithm); ^ error: initializing argument 2 of 'void v8::ObjectTemplate::SetAccessor(v8::Local<v8::String>, v8::AccessorGetterCallback, v8::AccessorSetterCallback, v8::Local<v8::Value>, v8::AccessControl, v8::PropertyAttribute, v8::Local<v8::AccessorSignature>)' [-fpermissive] void SetAccessor( ^ error: invalid conversion from 'Nan::NAN_SETTER_RETURN_TYPE (*)(v8::Local<v8::String>, v8::Local<v8::Value>, Nan::NAN_SETTER_ARGS_TYPE) {aka void (*)(v8::Local<v8::String>, v8::Local<v8::Value>, const Nan::PropertyCallbackInfo<void>&)}' to 'v8::AccessorSetterCallback {aka void (*)(v8::Local<v8::String>, v8::Local<v8::Value>, const v8::PropertyCallbackInfo<void>&)}' [-fpermissive] t->InstanceTemplate()->SetAccessor(Nan::New<String>("training_algorithm").ToLocalChecked(), GetTrainingAlgorithm, SetTrainingAlgorithm);
V8引擎的文档说
The following example shows how to use a FunctionTemplate: * * \code * v8::Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(); * t->Set("func_property", v8::Number::New(1)); * * v8::Local<v8::Template> proto_t = t->PrototypeTemplate(); * proto_t->Set("proto_method", v8::FunctionTemplate::New(InvokeCallback)); * proto_t->Set("proto_const", v8::Number::New(2)); * * v8::Local<v8::ObjectTemplate> instance_t = t->InstanceTemplate(); * instance_t->SetAccessor("instance_accessor", InstanceAccessorCallback); * instance_t->SetNamedPropertyHandler(PropertyHandlerCallback, ...); * instance_t->Set("instance_property", Number::New(3)); * * v8::Local<v8::Function> function = t->GetFunction(); * v8::Local<v8::Object> instance = function->NewInstance(); * \endcode
但我不知道如何使用这个来解决我的function。 有任何想法吗?
SetTrainingAlgorithm
签名是:
void SetTrainingAlgorithm(v8::Local<v8::String>, const Nan::PropertyCallbackInfo<v8::Value>&);
但应该是:
void SetTrainingAlgorithm(v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>&);
不一样的命名空间。
解决scheme是使用
Nan::SetAccessor(t->InstanceTemplate(), Nan::New<String>("training_algorithm").ToLocalChecked(), GetTrainingAlgorithm, SetTrainingAlgorithm); Nan::SetAccessor(t->InstanceTemplate(), Nan::New<String>("learning_rate").ToLocalChecked(), GetLearningRate, SetLearningRate); Nan::SetAccessor(t->InstanceTemplate(), Nan::New<String>("learning_momentum").ToLocalChecked(), GetLearningMomentum, SetLearningMomentum); Nan::SetAccessor(t->InstanceTemplate(), Nan::New<String>("layers").ToLocalChecked(), GetLayerArray);
代替。 这是从南库1版改为2版。
- 有一些进展。发送电话不要到nodejs土地
- 使用LLVM在JXcore中可用的节点插件
- 为Node.js编译本地C ++模块,链接到openSSL / libcrypto失败
- 使用Rtmp将videostream式传输到stream媒体服务
- 如何将const void *传递给node.js?
- Node.js 6 addon将Buffer.from()转换为const UInt8 *
- 获取已经运行的进程的subprocessID
- 节点configuration文件中的___mac_get_pid符号是什么?
- * v8 :: String :: Utf8Value(args – > ToString())不会返回node.js addon参数的string