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

Langage C++ Discussion :

Spécialisation template vide (pour membres statiques)


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 150
    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 150
    Billets dans le blog
    150
    Par défaut Spécialisation template vide (pour membres statiques)
    Bonjour à tous,

    Dans mon problème du jour, j'ai une classe template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    template <typename BoardType>
    class Rules
    {
        typedef typename BoardType::Coords Coords;
     
    private:
     
    public:
        virtual void init(BoardType& cb)=0;
     
        // ...
    };
    Et je voulais avoir dans cette classe, deux membres statiques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Rules
    {
    public:
        static const int PT_NONE = 0;       /*!< ID that defines the lack of piece */
     
        static bool isAPiece(const Piece& piece);
    };
    Bien sur, je veux l'utiliser de la manière suivante : Rules::PT_NONE ou encore Rules::isAPiece mais si je mets mes fonctions dans la classe template, il me demandera de spécifier le template (logique). Donc, comment puis je faire, pour lui dire, je veux un truc "Rules" qui soit sans template, car uniquement les trucs statiques ont été mis dedans ?

    Merci beaucoup
    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
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut


    Si ces membres ne dépendent pas du type template, tu es sur qu'ils doivent être dans la classe ? Peut être que c'est un paramètre du jeu (dans mettre dans une classe Game) plutôt qu'un paramètre des règles ? Sinon, le plus simple reste d'en faire des variables et fonctions libres (oui, ça fait une variable globale, mais c'est déjà ce que tu fais avec ton static)

    Sinon, tu peux ajouter un paramètre template par défaut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    struct static_type {}; // c'est moche comme nom
    template <typename BoardType = static_type>
    class Rules
    {
        static const int PT_NONE = 0;       /*!< ID that defines the lack of piece */
        static bool isAPiece(const Piece& piece);
    };
    Rules::PT_NONE; // Ok, correspond à Rules<static_type>::PT_NONE
    Rules::isAPiece(p); // Ok, correspond à Rules<static_type>::isAPiece()
    Tu peux créer un accesseur (fameuse règle d'ajouter une indirection) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    template <typename BoardType>
    class Rules
    {
        static const int PT_NONE = 0;       /*!< ID that defines the lack of piece */
        static bool isAPiece(const Piece& piece);
    };
     
    struct StaticRules { 
        static const int PT_NONE { return Rules<int>::PT_NONE; }
        static bool isAPiece(const Piece& piece) { return Rules<int>::isAPiece(piece); }
    }
     
    StaticRules::PT_NON(); // Ok
    StaticRules::isAPiece(p); // Ok
    Mais quitte à faire ça, autant directement mettre les static dans StaticRules


    PS : le const devant int n'est pas utile (retour par copie)

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 150
    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 150
    Billets dans le blog
    150
    Par défaut
    Merci.

    J'en ai résulté pour la seconde méthode, avec une autre classe nommée autrement
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Template - Spécialisation de membre statique
    Par dragonjoker59 dans le forum Langage
    Réponses: 13
    Dernier message: 10/10/2011, 10h22
  2. Réponses: 12
    Dernier message: 02/12/2010, 11h36
  3. Réponses: 4
    Dernier message: 04/09/2008, 10h58
  4. Membre statiques et templates
    Par Plomeg dans le forum C++
    Réponses: 7
    Dernier message: 28/12/2007, 22h28
  5. Réponses: 0
    Dernier message: 25/07/2007, 14h47

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