@
soli @
hitmanx 非常感谢两位的回复。
但是很抱歉,是我的问题没说清楚……下午上班前看了下还没人回复,然后到现在才看到……
首先我所使用的这个引擎,在注册接口的时候,只接受指定形式的接口:
void CallbackFunc(const v8::FunctionCallbackInfo<v8::Value>& info);
所以我需要InterfaceGenerator返回这样一个函数,形如:
template <typename FuncType, typename Head, typename... Tail>
auto InterfaceGenerator(FuncType func)
{
return [func](const v8::FunctionCallbackInfo<v8::Value>& info) // lambda表达式
{
// 要返回的真正的函数体
};
}
然后我就可以这样进行注册:
bool myFunc(int, char*);
global->Set(“myFunc”, FunctionTemplate::New(isolate, InterfaceGenerator<int, char*>(myFunc)));
这里InterfaceGenerator的功能是利用模板参数和目标函数,返回一个新的函数,其实叫wrapper更合适……
其次转换每种参数的步骤是不一样的,不是单纯调用一个getArgs(int idx, float& f)就可以完成的,当然这一步我自己差不多知道怎么搞,写一个专用的使用模板的转换函数即可。
最后也是我最想实现的一点,就是变参模板……就像上面代码里面那样:
<typename Head, typename... Tail>
但是这一步也是问题最大的,用递归的话我实在想不出来怎么把参数依次传递到最终调用的地方。其他方式好像也拆不开参数列表……