J'ai classe qui gère les paquets:pointeur de fonction avec des données supplémentaires
typedef void (*FCPackageHandlerFunction)(FCPackage*);
class FCPackageHandlers{
...
void registerHandler(FCPackage::Type type, FCPackageHandlerFunction handler);
void handle(FCPackage* package);
...
QHash<FCPackage::Type, FCPackageHandlerFunction> _handlers;
};
J'ai une classe de serveur qui reçoivent des paquets. Maintenant, je veux enregistrer une fonction qui gère les paquets. Mais cette fonction doit avoir une instance du serveur pour les autres variables.
Alors j'essayez ceci:
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));
}
Mais je reçois cette erreur:
error: no matching function for call to 'FCPackageHandlers::registerHandler(FCPackage::Type, FCLoginHandler)'
note: candidates are: void FCPackageHandlers::registerHandler(FCPackage::Type, void (*)(FCPackage*))
Quelqu'un sait-il la bonne solution?
la chose est, je ne peux pas changer le type de FCPackageHandlerFunction. Y a-t-il une autre solution? – VDVLeon
@VDVLeon - Voir mes modifications. – Manuel