Невозможно преобразовать аргумент указателя на функцию - PullRequest
0 голосов
/ 01 апреля 2009

Я получаю ошибку:

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

Мне кажется, что typedef и сигнатура функции идентичны.

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

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

1 Ответ

1 голос
/ 02 апреля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...