IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Template et abstraction


Sujet :

C++

  1. #1
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 136
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 136
    Billets dans le blog
    150
    Par d�faut Template et abstraction
    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
    Voici mon code :
    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
    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;
        }
    };
    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.

    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 (je vais tester)
    EDIT : Bah oui, un template ne peut pas �tre virtuel ...
    Vous souhaitez participer � la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui conna�t l'erreur, conna�t la solution.

  2. #2
    Membre Expert

    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Ao�t 2004
    Messages
    1 391
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France, Doubs (Franche Comt�)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 1 391
    Par d�faut
    Bonjour,

    La description du probl�me technique me laisse � penser que tu n'as peut-�tre pas d�finie assez clairement les points de variation de ton design en particulier le moment de leur d�termination (compilation/ex�cution pour ton cas).

    Pourquoi as-tu besoin d'un pointeur sur un Controler<T> dont tu ne connais pas le T ? Dit autrement quand est d�termin� le GameBoard utilis� ?

    Sinon de mani�re plus g�n�rique la solution typique est un Variant coupl� � un Visitor. Cependant ta volont� de connaitre le Coords pour le type de retour va �tre un probl�me.

    NB: Non, fonction template virtuelle �a n'existe pas.

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 136
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 136
    Billets dans le blog
    150
    Par d�faut
    En fait, les controleurs ne sont utilis� que dans une classe Game. Cette classe, je veux aussi la rendre abstraite (AbstractGame), qui aura une fonction addControler et le controler devra donc �tre un pointeur.

    Le but d'avoir un abstract game �tait de faire un jeu qui, apr�s la demande de l'utilisateur, soit un jeu d'�chec, ou un jeu de dame, ou un jeu autre

    Donc, oui, � un moment j'ai un conflit dans le fait de savoir si c'est compilation-time ou execution-time. Mais en m�me temps, je me dis que cela pourrait fonctionner
    Vous souhaitez participer � la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui conna�t l'erreur, conna�t la solution.

  4. #4
    Membre Expert

    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Ao�t 2004
    Messages
    1 391
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France, Doubs (Franche Comt�)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 1 391
    Par d�faut
    Tu codes pour faire un programme ou une biblioth�que ? "l'utilisateur" c'est l'utilisateur final ou l'utilisateur de ta biblioth�que ?

    Faire un passage d�termination compile time / d�termination runtime, ca se fait (typiquement via une factory sur un type variant). Cependant devoir en abuser est un signe d'un probl�me dans les choix du design.

    Est-ce que le type Gameboard est connue au sein d'un classe concr�te GameA ? Si non, o�/quand/par qui est d�termin� ce type ?

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 136
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 136
    Billets dans le blog
    150
    Par d�faut
    Utilisateur finale (le joueur).
    J'avais d�cid� de faire une fabrique, qui fabriquerai les game, afin de les ressortir en AbstractGame et de les utiliser. Mais � cause de ce controler qui est finalement d�pendant du plateau (quoi que ... je dis peut �tre une b�tise).
    J'essaie d'�viter les abus et le coup du variant ne me semble pas du tout une solution cette fois.
    Vous souhaitez participer � la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui conna�t l'erreur, conna�t la solution.

  6. #6
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par d�faut
    Bonsoir,

    et si tu passais en param�tre template une classe impl�mentant le comportement de getMove (classe de politique), est-ce que cela solutionnerait ton probl�me? Cela ne correspond pas tout � fait � la virtualit� pure mais peut-�tre que cela suffit dans ton cas?

  7. #7
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 136
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 136
    Billets dans le blog
    150
    Par d�faut
    Citation Envoy� par Aleph69 Voir le message
    Bonsoir,

    et si tu passais en param�tre template une classe impl�mentant le comportement de getMove (classe de politique), est-ce que cela solutionnerait ton probl�me? Cela ne correspond pas tout � fait � la virtualit� pure mais peut-�tre que cela suffit dans ton cas?
    Je dois dire que j'ai du mal � imaginer cette solution. Pouvez vous me donner un exemple, ou m�me d�taill� l'explication, s'il vous plait ?
    Vous souhaitez participer � la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui conna�t l'erreur, conna�t la solution.

  8. #8
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par d�faut
    Bonjour,

    tu trouveras un exemple ici.

    Dans cet exemple, on fait varier le comportement de Accumulation en lui passant en param�tre une Operation devant n�cessairement avoir pour fonction membre une fonction statique Accumuler (on n'est pas forc� de la prendre statique). Ensuite, il suffit de d�finir les op�rations que l'on veut (Addition, Multiplication, ...).

    De fa�on similaire, tu pourrais passer en param�tre template une classe Move, ayant pour fonction membre une fonction getMove.

Discussions similaires

  1. Abstraction, Template & operateur
    Par ikeas dans le forum Langage
    R�ponses: 7
    Dernier message: 30/12/2014, 13h04
  2. appliquer plusieurs templates
    Par Manu_Just dans le forum XSL/XSLT/XPATH
    R�ponses: 7
    Dernier message: 04/04/2003, 16h26
  3. template match="node() mais pas text()"
    Par Manu_Just dans le forum XSL/XSLT/XPATH
    R�ponses: 4
    Dernier message: 26/03/2003, 10h52
  4. [XSLT] template
    Par demo dans le forum XSL/XSLT/XPATH
    R�ponses: 4
    Dernier message: 09/09/2002, 11h31
  5. Abstract VS virtual
    Par LE CHAKAL dans le forum Langage
    R�ponses: 2
    Dernier message: 29/08/2002, 17h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo