Bonjour � tous,
Je n'arrive pas � m'en sortir dans un cas, avec des templates, que j'aimerai avoir des pointeurs super g�n�rique dessus.
Je m'explique :aie:
Voici mon code :
J'aimerai pouvoir faire un pointeur de Controler. donc g�n�rique au possible. Mais comme ma classe est template, la g�n�ricit� est stopp�e nette une fois un type sp�cifi� (Controler<Type>). Ok, c'est normal.Code:
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 template <typename GameBoard> class Controler : public Listener<Move<typename GameBoard::Coords> > { typedef typename GameBoard::Coords Coords; private: protected: int m_colorControlled; /*!< Color associated to this controler */ public: /*! \brief Default constructor * Will define an invalid color making this controller basically invalid */ Controler():m_colorControlled(-1) {} // Put an invalid color // virtual ~Controler() = 0; /*! \brief Gets the move that the controler wants to play * This function is generally waiting for the move from the controler. * \return */ virtual Move<Coords> getMove() =0; /*! \brief Defines the color used by the controler * \param color */ virtual void setColorControled(int color) { m_colorControlled = color; } };
La solution en g�n�ral, c'est de faire une classe abstraite au dessus. Soit, mais en fait, je ne peux pas faire mieux dans ce sens l� (j'h�rite d�j� cette classe).
Mon probl�me, c'est que je veux vraiment une fonction virtuelle pure getMove() et que en plus celle-ci me retourne le type Coord qui est sous jacent au plateau.
Est ce qu'il existe une solution et quelle serait-elle ?
(Note, le Listener peut �tre compl�tement �ject�, donc ne nous en pr�occupons pas)
En �crivant ce message, j'ai pens� que peut �tre, le type de retour getMove() et donc la fonction, ne devra �tre sp�cifi� que dans les classe h�ritante, mais je souhaite vraiment avoir la fonction en virtuelle pure.
Sinon, peut �tre passer la fonction en fonction template (donc, que le template soit sp�cifier � l'appel et non � la cr�ation de la classe). Je suis pas sur que cela puisse marcher et surtout que le compilateur ne m'enguirlande pas � faire des fonction templates virtuelle pure :aie: (je vais tester)
EDIT : Bah oui, un template ne peut pas �tre virtuel ... :aie: