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.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_;
};
PageSummary.h
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 ));
    }
};
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".

Console
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Titre
1 - Make Job
0 - Quit
Ceci fonctionne bien, cependant je n'arrive pas a passer directement une fonction en paramètre pour la "binder" dans la classe Page.

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 ?
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 );
    }
};
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 )

Merci d'avance.