【发布时间】:2020-06-11 10:02:41
【问题描述】:
我正在用 C++ 构建一个 nodejs 插件,我正在尝试制作一个从 C++ 到节点的函数导出器。更确切地说,我正在尝试构建一个类似的功能:
std::string func(std::string param)
{
return param;
}
void func_wrapper(const v8::FunctionCallbackInfo<v8::Value>& args)
{
Isolate* isolate = args.GetIsolate();
std::string str(*v8::String::Utf8Value(isolate, args[0]));
auto ret = func(str).c_str();
args.GetReturnValue().Set(String::NewFromUtf8(
isolate, ret, NewStringType::kNormal).ToLocalChecked());
}
void Initialize(v8::Local<v8::Object> exports)
{
NODE_SET_METHOD(exports, "func", func_wrapper);
}
NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)
我试图让导出更多函数变得更容易,而无需手动创建包装器,如下所示:
template<auto Func>
void Export(const v8::Local<v8::Object>& exports, std::string name)
{
auto wrapper = [](const v8::FunctionCallbackInfo<v8::Value>& args) {
Isolate* isolate = args.GetIsolate();
unsigned int lg = args.Length();
auto ret = Func(args[0], args[1], ...) //how to?
};
NODE_SET_METHOD(exports, name.c_str(), wrapper);
}
std::string func(std::string param)
{
return param;
}
void Initialize(v8::Local<v8::Object> exports)
{
Export<func>(exports, "func");
}
NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)
但我不知道如何在我的导出函数中调用 Func。有什么方法可以一个一个地给函数一个参数?
【问题讨论】: