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 :

Question d'élégance avec les templates.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 96
    Par défaut Question d'élégance avec les templates.
    Bonsoir,

    J'ai un petit soucis dans la réalisation d'un gestionnaire de ressources.
    J'ai crée un singleton CRessourcesManager qui charge des ressources depuis le disque avec une méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    template<class T>
        QSharedPointer<T> load<T>(QString filename){
            QListIterator it(m_loaders);
            while(it.hasNext()){
                IRessourcesLoader loader = it.next();
                if(loader.isValid<T>()){
                    return loader.load<T>(filename);
                }
            }
        }
    IRessourcesLoader est une classe interface qui doit implémenter le chargement d'un type de données.
    Donc pour chaque implémentation de IRessourcesLoader ma méthode doit vérifier si le loader est abilité à charger le type en question.
    J'aimerai conserver la possibilité d'écrire n'importe qu'elle implémentation de IRessourcesLoader et de simplement avoir à l'ajouter à CRessourcesManager avant d'apeller la méthode load avec le type attendu.

    Existe-t-il une méthode plus élégante ? Que d'utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if(loader.isValid<T>()){
            return loader.load<T>(filename);
    }
    Merci

  2. #2
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    isValid() fait quoi?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 96
    Par défaut
    Cette méthode est sensé vérifier la compatibilité entre le type demandé et le type géré par l'implémentation de IRessourcesLoader.

    Je crois avoir trouvé ce que je cherchais :
    http://loulou.developpez.com/tutorie...eur3d/partie4/
    Il est vraiment incroyable ce mec xD, je trouve son code presque mystique parfois...

    Merci

  4. #4
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    ca serait encore mieux sans Singleton

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634

  6. #6
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Je confirme : préfère les traits au code proposé par loulou. Le code de loulou est sympathique, mais il n'est pas extensible. Hors, tu vas vouloir rajouter des loaders, et peut-être permettre à tes utilisateurs de rajouter des loaders - et eux ne peuvent pas modifier ton code.

    Les traits, du fait qu'ils sont spécialisable à volonté, permettent au code client d'étendre le code de la librairie sans avoir à le modifier.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  7. #7
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Citation Envoyé par Joel F Voir le message
    ca serait encore mieux sans Singleton
    Et bien tu vois, j'ai eu l'occasion d'y réfléchir assez intensivement par le passé, et dans ce cas précis (Ressource manager pour un jeux), c'est une des rares fois où j'ai pu justifier un singleton (et pourtant je les ai en horreur).

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 96
    Par défaut
    Super, merci les classes de politiques c'est exactement ce que je cherchais, mais je savais pas que ça existé !
    Rassurez moi c'est quand même un concept relativement avancé du c++ non ? Je dois m'y reprendre à plusieurs fois avant de saisir les fonctionnements expliqués dans les liens...

    Pour ce qui est du singleton du gestionnaire de ressources, je n'ai aucun intérêt à avoir plusieurs instances d'une classe qui vise à centraliser la gestion de la mémoire et plus précisément à limiter les chargements depuis le disque... Donc il me semble qu'un singleton est justifié dans ce cas.

  9. #9
    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
    Le singleton ne sert pas qu'a assurer l'uncité d'une instance, il vise à fournir un point d'accés global à une instance, or (et il me semble que c'est expliqué dans l'article d'Emmanuel Deloget), il est souvent possible de centraliser dans une portion restreinte de code l'utilisation de ton manager (avec une bonne architecture), il n'y a donc plus besoin d'accés global, la seul chose qui reste c'est l'unicté, et pour ca il suffit de ne créer qu'une instance.

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

Discussions similaires

  1. wpf: probleme avec les templates
    Par mk.wassim dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 18/03/2009, 17h54
  2. probleme avec les templates d'un formview
    Par devdotnet dans le forum ASP.NET
    Réponses: 2
    Dernier message: 01/11/2007, 09h32
  3. [Delphi 7] Questions pour débuter avec les bases de données
    Par DamKre dans le forum Bases de données
    Réponses: 6
    Dernier message: 25/09/2007, 16h06
  4. Erreur de link avec les templates
    Par suiss007 dans le forum C++
    Réponses: 6
    Dernier message: 04/01/2007, 11h09
  5. Probleme avec les templates
    Par TeC_MaN dans le forum C++
    Réponses: 2
    Dernier message: 08/01/2006, 14h53

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