The error I’m getting:
error C2664: 'v8::FunctionTemplate::New' : cannot convert parameter 1 from 'v8::Handle<T> (__cdecl *)(const v8::Arguments &)' to 'v8::InvocationCallback'
Relevant definitions:
typedef Handle<Value> (*InvocationCallback)(const Arguments& args); template<class C> class V8ScriptClass { public: template<class C, typename Rtype, typename Ptype1, Rtype (C::*FuncPtr)(Ptype1)> void RegisterFunc(const char* const scriptname) { objtemplate->Set( v8::String::New(scriptname), v8::FunctionTemplate::New( V8ScriptClass<C>::RelayCallback<C, Rtype, Ptype1, FuncPtr> )); }; template<typename Rtype, typename Ptype1, Rtype (*FuncPtr)(Ptype1 param1)> static v8::Handle<v8::Value> RelayCallback(const v8::Arguments& args) { std::cerr<<__FUNCTION__<<std::endl; v8::HandleScope handle_scope; return handle_scope.Close(toJSType( ((FuncPtr)(toCType(args[0]))) )); };
Looks to me like the typedef and the actual function signature are identical.
edit: forgot one declaration:
class EXPORT FunctionTemplate : public Template { public: /** Creates a function template.*/ static Local<FunctionTemplate> New( InvocationCallback callback = 0, Handle<Value> data = Handle<Value>(), Handle<Signature> signature = Handle<Signature>());
I found the error. the RelayCallback template takes a static function pointer as argument, and I tried to instantiate it with a member function pointer. I just had to change it to a member function pointer template argument.