在 javascript 对象中公开 C++ 类的静态成员函数的代码如下所示
tpl->InstanceTemplate()->Set( String::NewSymbol("thefunc"), FunctionTemplate::New(myclass::myfunc)->GetFunction() );
映射到类的静态成员的thefunc
javascript 可访问的函数名称在哪里。myfunc
myclass
由于该方法是静态的,我们必须通过一些实例指针访问所有类实例成员并编写一些样板代码来获取它。例如:
static Handle<Value> myclass::myfunc( const Arguments &args )
{
myclass *instance = Unwrap<myclass>( args.This() );
// now use 'instance' like 'this'
return True();
}
我想知道是否可以在接口中设置成员函数并将其绑定到类实例以避免带有样板的静态函数并将系统调用直接调用到我的非静态方法中,以便我可以使用“this”指针。
我可以想到一种丑陋的方式,它涉及#define
扩展为包含代理函数的模板类,该代理函数解包“this”并将所有调用转发给成员函数,这将导致设置代码类似于以下内容:
DECLARE_MEMBER_FUNCTION( thefunc_handle, myclass, myfunc );
tpl->InstanceTemplate()->Set( String::NewSymbol("thefunc"), thefunc_handle );
但似乎 Node.js 已经支持这一点,或者有人设计了更好的解决方案。