Bonjour à tous
Deja je vous explique ce que je veux faire.
Je veux avoir une liste chainée qui contient des objets. jusque là ca va vous suivez? lol
Ensuite j'aimerais qu'à un noeud précis de cette liste chainée, je puisse appeler n'importe quelle méthode de l'objet que la liste stocke.
Ce que j'ai fait maintenant.
J'ai fait une fonction CallOn dans ma liste chainée qui prend en argument premier argument le numéro du noeud sur lequel je veux appeler ma fonction.
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 #include <iostream> #include "GSETEMPLATELIST.h" using namespace std; class TOTO { private: int test; public: TOTO(){test=0;}; ~TOTO(){}; void SetValue(int v){test=v;}; int GetValue(void){return test;}; void Call(char *function_name) { string tmp=function_name; if(tmp.compare("toto")==0) { cout << "appel de la fonction toto" << endl; } else if(tmp.compare("tutu")==0) { cout << "appel de la fonction tutu" << endl; } else if(tmp.compare("tata")==0) { cout << "appel de la fonction tata" << endl; } }; }; void main(void) { GSETEMPLATELIST<TOTO> List;//Déclaration d'une liste chainée template de type TOTO TOTO *toto1,*toto2; GSENODE<TOTO> *ptr;// Pointeur sur un noeud de la liste chainée de type TOTO toto1=new TOTO(); toto2=new TOTO(); toto1->SetValue(0); toto2->SetValue(45); List.Add(toto1); List.Add(toto2); cout << List.GetSize() << endl;//Retourne le nb de noeud. 2 ici ptr=List.GetNode(0); if(ptr==NULL) { cout << "ptr null" << endl; } else { cout << ptr->Data->GetValue() << endl;//Retourne 45 car le dernier inséré est le premier de la liste } //Data est un pointeur sur les données du noeud List.CallOn(0,TOTO::Call,"toto");//Appel sur le noeud numéro 0 de la fonction Call //qui elle meme appelle la fonction toto List.CallOn(1,TOTO::Call,"toto"); //Appel sur le noeud numéro 1 de la fonction Call //qui elle meme appelle la fonction toto List.CallOn(0,TOTO::Call,"tata"); //Appel sur le noeud numéro 0 de la fonction Call //qui elle meme appelle la fonction tata }
Le 2e argument est le nom de la fonction Call. Cette fonction Call se charge d'apeler la fonction dont le nom est passé en 3e argument.
Mon problème arrive avec le nombre d'arguments qui devient variable en fonction du nom de fonction qui est passé en 3e argument.
Si la fonction toto prends 2 argument et la fonction tata aucun, comment je peux faire pour passer les argument ou pas à ma fonction CallOn?
Partager