Как преобразовать метод класса в 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
указатель. Вам нужно написать функцию так, чтобы ей не нужен объект.