2009-04-01 5 views
0

ошибка я получаю:Невозможно преобразовать указатель функции аргумент

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

Соответствующие определения:

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

Смотрит на меня, как ЬурейеЕ и фактическая сигнатура функции идентичны.

редактировать: забыл одно объявление:

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>()); 
+0

Где вы используете InvocationCallback? – dirkgently

+0

добавил отсутствующее объявление – heeen

+0

Не только подпись (= 0 является аргументом по умолчанию), но и фактическим вызовом. – dirkgently

ответ

1

Я нашел ошибку. шаблон RelayCallback принимает статический указатель на функцию в качестве аргумента, и я пытался создать его с помощью указателя на функцию-член. Мне просто пришлось изменить его на аргумент шаблона указателя функции-члена.

 Смежные вопросы

  • Нет связанных вопросов^_^