Bonjour,
je réalise une application avec la SDL, et j'ai crée des boutons. Je voudrais que lorsqu'un bouton est pressé cela appelle la bonne fonction.

La solution : Signals and Slots de Qt me parait intéressante et j'aimerais pouvoir l'implémenter.

Pour cela, je pensais faire une classe Connecteur et une fonction connect qui prend l'objet emetteur, la méthode qui envoie le signal, l'objet recepteur, et la méthode qui doit recevoir le signal.

Idée pour la classe Connecteur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
template <class Emetteur, class Recepteur>
class Connecteur
{
    Emetteur & emetteur;
    Connecteur & connecteur;
    // Et la problème je ne peux pas déclarer mes pointeurs sur des méthodes
    // car je peux avoir void, int, ...
};
De plus admettons que je puisse faire la déclaration de mes méthodes (c'est peux etre possible en s'inspirant de mem_fun), je voudrais un conteneur de pointeurs sur mes objets, et de pointeurs sur mes méthodes pour pouvoir y accéder de cette maniere :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
// admettons que ce code marche
Bouton bouton;
Receveur receveur;
connect(&bouton, &bouton::onCLic, &receveur, &Receveur::methode);
onClic a le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
void Bouton::onClic()
{
    Connecteur::send(this, &Bouton::onClic);
}
et send :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
void Connecteur::send(Emetteur & emetteur, PtrEMethode methode) // PtrEMethode est un typedef pour un pointeur de methode de emetteur
{
    Recepteur * objet = connecteurs[emetteur][methode].first;
    PtrRMethode * methodeR =  connecteurs[emetteur][methode].second;
    objet->(*methodeR)();
}
Avec ce code je dois forcement avoir une methode qui n'a pas de parametres donc c'est très limité, mais bon le problème est que cette idée d'implémentation ne me parait pas réalisable.

J'aimerais avoir votre avis, et savoir comment vous feriez pour implémenter ceci, ou s'il y a une meilleur méthode que celle utilisée par Qt faite le moi savoir.

D'avance merci.