Bonjour à vous !
Suite à ce post et à l'aide de celui-ci, j'ai souhaité améliorer la simplicité d'ajout de nouvelles "pages" à mon programme.
Page.hPageSummary.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 #include <vector> #include <string> #include <functional> #include "Model.h" class Page { //Définit le type à stocker enum CallType { INFO, ACTION }; //Pour stocker à la fois la fonction et sa définition struct TxtAndFun { TxtAndFun( const std::string& txt, std::function< void() > fun ) : txt( txt ), fun( fun ) {} std::string txt; std::function< void() > fun; }; public: virtual ~Page() {} void display(); void work(); //Ajouter une fonction ou simplement une information protected: void add( const std::string& txt, std::function< void() > fun ); void add( const std::string& txt ); private: std::vector< TxtAndFun > actions_; std::vector< std::string > infos_; //Pour garder l'ordre des informations entrées std::vector< CallType > call_order_; };J'ai pour but de n'avoir pas à me préoccuper de la réponse attendue par l'utilisateur. Ce qui permettrait de changer l'interface en modifiant seulement l'ordre de mes fonctions "add".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 #include "Page.h" //Creation d'une nouvelle page class Summary : public Page { public: Summary( Model& model ) { add( "Titre" ); add( "Make Job", std::bind( &Model::change_page, &model, PageType::MAKE_JOB )); add( "Quit", std::bind( &Model::prog_quit, &model )); } };
Console
Ceci fonctionne bien, cependant je n'arrive pas a passer directement une fonction en paramètre pour la "binder" dans la classe Page.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Titre 1 - Make Job 0 - Quit
Je suis contraint de le faire avant de l'envoyer en paramètre. Ni aurait t'il pas un moyen d'avoir simplement ce qui suis en fonction ?
De plus je ne comprends pas bien le fait de devoir écrire "&Model::change_page, &model" pour enregistrer cette fonction "model.prog_quit()" (Que j'ai obtenue en tâtonnant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class Summary : public Page { public: Summary( Model& model ) { add( "Titre" ); add( "Add Job", model.change_page( PageType::ADD_JOB )); add( "Quit", model.prog_quit ); } };)
Merci d'avance.
Partager