Как преобразовать метод класса в QScriptEngine::FunctionSignature

Я хочу передать этот метод:

QScriptValue ScriptProcessContext::construct(QScriptContext * ctx, QScriptEngine *)
{
    return this->newInstance();
}

в QScriptEngine::newFunction, Я попробовал следующие варианты:

  • Как в документации, а также в этом примере кода:

    QScriptValue ctor = engine->newFunction(construct);
    

    Ошибка:

    error C3867: 'ScriptProcessContext::construct': function call missing argument list; use '&ScriptProcessContext::construct' to create a pointer to member
    
  • Принудительный актерский состав:

    QScriptValue ctor = engine->newFunction((QScriptEngine::FunctionSignature)construct);
    

    Ошибка:

    error C2440: 'type cast' : cannot convert from 'overloaded-function' to 'QScriptEngine::FunctionSignature'
    
  • Привести указатель на член

    QScriptValue ctor = engine->newFunction(
       (QScriptValue(ScriptProcessContext::*)(QScriptContext *, QScriptEngine *))
        &ScriptProcessContext::construct
    );
    

    Ошибка:

     error C2664: 'QScriptValue QScriptEngine::newFunction(QScriptEngine::FunctionSignature,int)' : cannot convert parameter 1 from 'QScriptValue (__cdecl ScriptProcessContext::* )(QScriptContext *,QScriptEngine *)' to 'QScriptEngine::FunctionSignature'
    

Так как правильно написать?

1 ответ

Решение

Вы пытаетесь передать член функции. Это не поддерживается. Используйте свободную функцию или статический метод.

Обратите внимание, что в обоих случаях у вас не будет this указатель. Вам нужно написать функцию так, чтобы ей не нужен объект.

Другие вопросы по тегам