Bonjour,
J'ai déclaré une "interface" pour les conteneurs de type LIFO sous la forme d'une classe générique abstraite :
Plusieurs classes héritent de la classe générique abstraite Lifo<T> et en définissent les fonctions membres, dont la classe générique BasicStack<T>.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #ifndef LIFO_H_ #define LIFO_H_ template<typename T> class Lifo { public: virtual void push(const T&) =0; virtual T pop() =0; virtual bool isEmpty() const =0; virtual int size() const =0; }; #endif // LIFO_H_
J'ai ensuite voulu déclaré une classe de test qui pourrait manipuler n'importe quel objet à travers les fonctions membres de l'interface Lifo<T>.
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 #ifndef LIFOTEST_H_ #define LIFOTEST_H_ #include "Lifo.h" class LifoTest { public: template<typename T> LifoTest(Lifo<T>*); void run(); private: template<typename T> Lifo<T>* container; }; #include "LifoTest.tpp" #endif // LIFOTEST_H_Mais j'ai une erreur à la compilation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 int main() { BasicStack<int> pile; LifoTest test(&pile); test.run(); return 0; }
Sachant que le membre _container est l'objet que je souhaite manipuler dans la fonction membre run(). J'ai utilisé un pointeur afin de pouvoir utiliser le polymorphisme.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Data member '_container' cannot be a member template
Partager