Bonjour à tous ,
je suis nouveau sur ce forum, j'ai 15 ans et j'ai un problème concernant les templates et les pointeurs de fonction. Je dois avouer que je maîtrise (très) mal les templates mais les quelques recherches que j'ai effectuées ne m'ont pas permis de résoudre mon problème (ou d'une manière beaucoup trop complexe). Je compile sous windows 64bits avec code blocks et mingw meme si cela n'a pas beaucoup d'importance.
Je développe actuellement un "éditeur" de boutons (correspondant à la classe Object et ses dérivés) en C++ avec la SFML qui devraient pouvoir être interconnectés avec toutes les variables du programme (ou une grande partie) sous forme de pointeurs de fonction : par exemple, une barre peut être connectée à la composante r de la couleur d'un autre objet, un bouton peur être connecté à l'affichage ou non d'un autre objet, un peu à la manière de Qt...
Je dispose d'une classe centrale qui gère les évènements et le temps en les "redirigeant" vers tous les éléments (ou objets) sous forme de pointeurs de fonction. Le problème est que toutes les fonctions "setter" de toutes les classes présentent de nombreuses différences de patron : il y en a 7 pour l'instant. Le problème est que :
-toutes les fonctions ne peuvent pas être "activées" (seules celles dont le patron est l'un des 7 patrons définis dans les pointeurs de fonction peuvent l'être)
-le nombre de fonction pour changer les arguments passés aux fonctions lors de leur activation est multiplié par le nombre de patrons (7).
Cependant, ce n'est pas du tout pratique car il faut que, pour chaque type de pointeurs, je crée les fonctions utiles pour travailler avec, ce qui multiplie par 7 (le nombre de pointeurs de fonction différents) le nombre de ces fonctions. Dans l'idéal, je voudrais obtenir quelque chose comme ce code qui ne marche pas pour remplacer les 7 pointeurs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 typedef void (MainWindow::*MainWindow_ptrColor)(sf::Color); //pointeur de fonction de MainWindow parametrant une couleur (donc SetColor) typedef void (MainWindow::*MainWindow_ptrInt)(int, bool); //pointeur de fonction de MainWindow parametrant une variable entiere typedef void (Object::*object_ptrFloat)(float, bool); //pointeur de fonction d'objet parametrant une variable flottante typedef void (Object::*object_ptrInt)(int, bool); //pointeur de fonction d'objet parametrant une variable entière typedef void (Object::*object_ptrString)(std::string); //pointeur de fonction d'objet parametrant un std::string typedef void (Object::*object_ptrVoid)(void); //pointeur de fonction d'objet déclenchant une fonction sans paramètre (comme par exemple Move) typedef void (Object::*object_ptrColor)(sf::Color); //pointeur de fonction d'objet parametrant une couleur
erreur du compilo mingw sous code blocks :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 template <typename T> typedef void (MainWindow::*MainWindow_ptrColor)(T,bool); template <typename T> typedef void (MainWindow::*MainWindow_ptrColor)(T); template <typename T> typedef void (Object::*MainWindow_ptrColor)(T,bool); template <typename T> typedef void (Object::*MainWindow_ptrColor)(T);
(il y a aussi d'autres erreurs mais qui sont liées à celles ci)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 D:\mes documents\SFML\AllButtonsTest - Copie\mainwindow.hpp:19: error: template declaration of `typedef' D:\mes documents\SFML\AllButtonsTest - Copie\mainwindow.hpp:21: error: template declaration of `typedef'
Ou, encore mieux :
Je ne sais pas du tout comment faire ! Si vous n'avez pas très bien compris, je peux vous réexpliquer (ce qui m'est difficile )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 template <typename T,typename S> typedef void (S)(T,bool); template <typename T> typedef void (S)(T);
Merci d'avance pour votre aide !
Partager