2
我有類處理包:額外數據函數指針
typedef void (*FCPackageHandlerFunction)(FCPackage*);
class FCPackageHandlers{
...
void registerHandler(FCPackage::Type type, FCPackageHandlerFunction handler);
void handle(FCPackage* package);
...
QHash<FCPackage::Type, FCPackageHandlerFunction> _handlers;
};
然後,我有誰收到包裹的服務器類。現在我想註冊一個處理包的函數。但是這個函數必須有其他變量的服務器實例。
所以我試試這個:
struct FCLoginHandler{
FCServer* server;
FCLoginHandler(FCServer* server){
this->server = server;
}
void operator()(FCPackage* package){
std::cout << "Received package: " << package->toString().data() << "\n";
}
};
...
FCServer::FCServer(){
_handlers.registerHandle(FCPackage::Login, FCLoginHandler(this));
}
但後來我得到這個錯誤:
error: no matching function for call to 'FCPackageHandlers::registerHandler(FCPackage::Type, FCLoginHandler)'
note: candidates are: void FCPackageHandlers::registerHandler(FCPackage::Type, void (*)(FCPackage*))
有誰知道正確的解決方案?
事情是,我不能改變FCPackageHandlerFunction類型。還有其他解決方案嗎? – VDVLeon 2010-02-09 13:55:34
@VDVLeon - 看我的編輯。 – Manuel 2010-02-09 14:13:31