Bonjour à tous, je tente de mettre en place un menu de debug pour une application graphique, qui me permettrait d'afficher et de modifier au runtime la valeur de variables/membres de classes ayant été ajoutés à ce menu de debug. A cette fin, j'ai développé le code ci dessous, dans un premier temps ne prenant en charge que des variables de type float (j'ai bien essayé de passer par des templates, mais j'ai été confronté à pleins de soucis, j'ai lâché l'affaire pour le moment, c'est un autre soucis de toute façon !). Je dois notamment stocker des pointeurs vers les accesseurs de la variable à surveiller.

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
 
 
 
typedef void (*setterptrFloat)(float);
typedef void (*setterptrInt)(int); //pour plus tard
typedef void (*setterptrUint)(uint); //pour plus tard
typedef void (*setterptrBool)(bool); //pour plus tard
 
typedef float (*getterptrFloat)(void);
typedef int (*getterptrInt)(void); //pour plus tard
typedef uint (*getterptrUint)(void); //pour plus tard
typedef bool (*getterptrBool)(void); //pour plus tard
 
 
 
class DebugMenuEntry
{
	//protected :
public :
 
		void (*setterFloat)(float);
		float (*getterFloat)(void);
 
		void (*setterInt)(int);
		int (*getterInt)(void);
 
		void (*setterUint)(uint);
		uint (*getterUint)(void);
 
		void (*setterBool)(bool);
		bool (*getterBool)(void);
 
 
	public :
 
		string m_text;
 
		virtual void Increment() = 0;
		virtual void Decrement() = 0;
};
 
 
 
 
class FloatValue : public DebugMenuEntry
{
	float m_Min;
	float m_Max;
	float m_Step;
 
public :
	FloatValue(string _text, float _step, float _min, float _max, getterptrFloat _getter, setterptrFloat _setter) 
	{
		m_Step = _step;
		m_Min = _min;
		m_Max = _max;
		m_text = _text;
 
		getterFloat = _getter;
		setterFloat = _setter;
	}
 
 
	virtual void Increment()
	{
		float currentVal = (*getterFloat)();
		currentVal += m_Step;
 
		if(currentVal > m_Max)
			currentVal = m_Max;
 
		(*setterFloat)(currentVal);
	}
 
	virtual void Decrement()
	{
		float currentVal = (*getterFloat)();
		currentVal -= m_Step;
 
		if(currentVal < m_Min)
			currentVal = m_Min;
 
		(*setterFloat)(currentVal);
	}
};
 
 
class DebugMenuManager
{
	//private :
	public :
		uint m_uSelectedItem;
		std::vector< DebugMenuEntry * > m_vEntries;
 
	DebugMenuManager()	{	}
 
	void addFloatValue(string _text, float _step, float _min, float _max, getterptrFloat _getter, setterptrFloat _setter)
	{
		m_vEntries.push_back( new FloatValue( _text, _step, _min, _max, _getter, _setter) );
	}
 
 
	void draw()
	{
		//draw content of m_vEntries[i].text + val getter
	}
 
        void keyboardunct(char key) //to navigate in the menu & change values
       {
         ...
       }
};
et dans mon main apres initialisation de mon DebugMenuManager :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
pDebugMenuManager->addFloatValue("ma variable membre float%f", 1, 0, 512, monObjet->getVariableFloat,  monObjet->setVariableFloat);
Or, à la compilation, sur l'appel à addFloatValue, je suis gratifié du message "un pointeur vers une fonction liée peut uniquement être utilisé pour appeler la fonction". Quelles modifications apporter pour que cela fonctionne ? N'hésitez pas à me demander des explications supplémentaires si quelque chose n'est pas clair. Par avance merci à vous.