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 :

Pb de design


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 49
    Par défaut Pb de design
    Bonjour a tous.
    Soit la classe suivante (qui n'a rien a voir avec std ostream):

    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
    class OStream
    {
    	public:
    		OStream() throw();
    		.../...
     
    		virtual void Put(int);
    		virtual void Put(char);
    		virtual void Put(long);
    		.../...
     
    		OStream& operator << (int);
    		OStream& operator << (char);
    		OStream& operator << (long);
     
    	protected:
    	private:
    };
    Maintenant voici le pb:
    je voudrai creer une classe (disons Filter) qui agit comme un plug-in, et ainsi je pourrai ecrire une expression du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OStream() << L"text " << MyFilter() << 10;
    où MyFiler est une derivee de la classe Filter.

    Qlqn aurait une idee a me proposer concernat cette class Filter.
    Merci

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Puisque tu sembles vouloir réinventer la STL, inspire t'en. Regarde comment sont gérés les manipulateurs notamment.

    Tu pourras peut-être trouver des infos ici :
    http://www.angelikalanger.com/Articles/Topics.html#CPP

  3. #3
    Membre émérite Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    OStream() << L"text " << MyFilter() << 10;
    Si tu passes des paramètres à MyFilter, ça serait plus simple...
    Ca donnerait qqch du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    OStream() << MyFilter("text")<<10;
    A++

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 49
    Par défaut
    Merci
    Citation Envoyé par Loulou24
    Puisque tu sembles vouloir réinventer la STL, inspire t'en. Regarde comment sont gérés les manipulateurs notamment.
    Ile ne s'agit en rien des stream de stl (sauf peut etre le nom). et les manip. de l'STL sont des pointeurs sur des fonctions. ici il s'agit d'avoir une classe qui effectue des traitement complexes (un peu comme le modele Command).

    Citation Envoyé par reggae
    Si tu passes des paramètres à MyFilter, ça serait plus simple...
    Ok mais s'il on fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OStream() << ../.. << MyFilter(10) << .../..
    cela implique l'existance d'un operator du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OStream& operator << (OStream&,const Filter&);
    et que les filtres derives soient comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class MtFilter1 :public Filter
    {
    public:
     MyFilter1(int);
    .../...
    };
     
    class MyFilter2:public Filter
    {
    public:
     MyFilter2(char);
    .../...
    };
    Seulement la il nous est impossible d'utilser Filter d'une maniere dynamique (Considerez le cas ou ces filtres doivent etres charges a pratir une DLL).

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ile ne s'agit en rien des stream de stl (sauf peut etre le nom). et les manip. de l'STL sont des pointeurs sur des fonctions. ici il s'agit d'avoir une classe qui effectue des traitement complexes (un peu comme le modele Command).
    Dans ce cas donne plus de précisions : qu'est censée faire ta classe OStream, et que sont censés faire tes filtres ?

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 49
    Par défaut
    La class OStream est une classe abstraite servant de base pour des classes plus epcialisées:

    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
    class Rectangle;
    class Text;
    class DC;
    class Icon;
    .../..
     
    class TyOStream
    {
       public:
          explicit OStream(DC&);
          virtual ~OStream();
     
          virtual OStream& operator <<(const Rectangle&);
          virtual OStream& operator <<(const Text&);
          virtual OStream& operator <<(const Icon&);
          .../...      
    };
    en realite les operateurs ne sont pas vituel mais font appel a des methodes poroteges de OStream qui sont elles virtuelles.

    Les filtes qd a eux sont partages en 2 categories:
    1-les manipulateurs: des objets qui changent l'etat du stream (SetFont,SetTextColor)
    2.les transformateurs: qui acceptent une entre X, la traitent et la reinjectent dans le stream.

    Dans tous les cas les filteres agissent uniquement sur entree suivant leur invocation.

    Merci de votre aide.

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/02/2009, 12h06
  2. [power designer et Sybase] trigger
    Par mr_qno dans le forum Sybase
    Réponses: 4
    Dernier message: 12/07/2006, 18h32
  3. [OpenTools, designer] CmtSubComponent et superClasse
    Par kainor dans le forum JBuilder
    Réponses: 4
    Dernier message: 04/03/2003, 11h32
  4. Réponses: 3
    Dernier message: 09/02/2003, 01h09
  5. Désigner une variable avec une variable?
    Par littleman dans le forum Paradox
    Réponses: 4
    Dernier message: 12/08/2002, 11h21

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