我試圖將函數指針(類型爲QScriptEngine::FunctionSignature
(= QScriptValue (QScriptContext *, QScriptEngine *)
))傳遞給其他函數。但是我需要傳遞的函數是一個類的成員函數。在C++中傳遞成員函數指針
我用這樣的:
class MyClass
{
SomeVarType someVarINeedAccessTo;
QScriptValue print(QScriptContext* context, QScriptEngine* engine)
{
... someVarINeedAccessTo ...
}
void someFunction()
{
QScriptEngine engine;
QScriptValue printFunction = engine.newFunction(print);
engine.globalObject().setProperty("print", printFunction);
}
};
有了這個例子中,我得到的錯誤:
error: no matching function for call to QScriptEngine::newFunction(<unresolved overloaded function type>) note: candidates are: ...
如何傳遞的打印功能newFunction?
編輯:
我固定它是這樣的:
class MyClass
{
public:
...
class TheEngine : public QScriptEngine
{
public:
MyClass* instance;
};
static QScriptValue print(QScriptContext *context, QScriptEngine *engine);
void someFunction();
...
};
Myclass::someFunction()
{
TheEngine engine;
...
QScriptVaue printFunction = engine.createFunction(print);
engine.globalObject().setProperty("print", printFunction);
...
}
QScriptValue MyClass::print(QScriptContext* context, QScriptEngine* engine)
{
TheEngine* eng = dynamic_cast<TheEngine*>(engine);
eng->instance->doSomething(...);
return engine->undefinedValue();
}
下面的鏈接可能會有所幫助,如果您有沒有碰到過它已經來了:http://www.parashift.com/c++-faq-lite/pointers-to-members.html – Tom 2010-11-23 15:33:54