Frage

Der Fehler Ich erhalte:

error C2664: 'v8::FunctionTemplate::New' : cannot convert parameter 1 from 'v8::Handle<T> (__cdecl *)(const v8::Arguments &)' to 'v8::InvocationCallback'

Relevante Definitionen:

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]))) ));
};

Sieht für mich wie die typedef und die eigentliche Funktion Signatur identisch sind.

edit: vergessen hat, eine Erklärung:

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>());
War es hilfreich?

Lösung

fand ich den Fehler. die RelayCallback Vorlage nimmt einen statische Funktion Zeiger als Argument, und ich versuchte, es mit einem Mitglied Funktionszeiger zu instanziieren. Ich musste es einfach Template-Argument an ein Mitglied Funktionszeiger ändern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top