Есть ли способ конвертировать из 'v8 :: Local' в 'void (int)'. У меня есть функция v8, и я пытаюсь передать ее в сигнал на windows.
v8::Local<v8::Function> function;
function = v8::Local<v8::Function>::Cast(args[1]);
(void)signal(SIGINT, function);
Я не уверен, как лучше работать над этим. Определение для сигнала:
_ACRTIMP _crt_signal_t __cdecl signal(_In_ int _Signal, _In_opt_ _crt_signal_t _Function);
Но, похоже, _In_opt_ _crt_signal_t эквивалентно void (int)
Редактировать: я пытался сделать то, что предложил jmrk. Я понимаю, как сделать его v8 постоянным, но я не уверен, как его обернуть. Я пытался использовать приведенную ниже оболочку, но она не работает.
struct c_api_interface { void (*func_js)(v8::Persistent<v8::Function>);};
template<typename Fn, Fn fn, typename... Args>
typename std::result_of<Fn(Args...)>::type
wrapper(Args... args) {
return fn(std::forward<Args>(args)...);
}
#define WRAPIT(FUNC) wrapper<decltype(&FUNC), &FUNC>
v8::Local<v8::Function> function;
function = v8::Local<v8::Function>::Cast(args[1]);
v8::Persistent<v8::Function> value(isolate, function );
c_api_interface my_interface;
my_interface.func_js = WRAPIT(value);
(void)signal(SIGINT, my_interface.func_js);