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

SL & STL C++ Discussion :

creation de manipulator


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 125
    Par défaut creation de manipulator
    Bonjour,

    j'essaie d'ecrire une lib permettant de generer du xlsx ( xls en xml )
    je souhaiterai pouvoir ecrire mon code de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sheet s("Sheet 1");  // creation d'une feuille
    s << "titre colonne 1" << "titre colonne 2" << endline;// insertion cellule par cellules
    s << "cellule 1"<< 27 << endline;
    j'ai reussi a ecrire ce code, par contre je suis bloqué sur la maniere d'ecire un manipulateur avec un parametre du style width( int )
    pour l'instant j'ai donc ce 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
     
     
    class Sheet;
    typedef Sheet& (*unary_manipulator)(Sheet&);
     
    class Sheet
    {
     
    public:
            Sheet(std::string name):{};
     
            friend Sheet& operator << (Sheet& O, const char * S);  // permet  le << string
            friend Sheet& operator << (Sheet& O, unary_manipulator S); // permet le << endline
    };
     
    Sheet& operator << (Sheet& O, const char * S)
    {
         return O;
    }
     
    Sheet& operator << (Sheet& O, unary_manipulator S)
    {
        return O;
    }
     
    Sheet& endline( Sheet& s)
    {
    return s;
    }
    je pensais réussir a écrire un manipulateur avec un paramètre en utilisant un fonctor de ce genre ( mais ca ne marche pas )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    struct width
    {
     width ( int w ){};
     Sheet& operator()(Sheet& s){return s;};
     
    };
    auriez vous une idée de la manière d'écrire un : "<< width(1) << ..."

    merci

  2. #2
    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
    Par défaut
    Salut,
    Remarque : std::cout<<width(2) n'est pas possible.
    Si malgré tout tu veux quelque chose de ce genre, une approche par héritage :
    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
    struct unary_manipulator
    {
       virtual ~unary_manipulator(){}
       virtual Sheet&do_it(Sheet&)const=0;
    };
    Sheet& operator << (Sheet& O, unary_manipulator const &S)
    {
        return S.do_it(O);
    }
     
    struct width : public unary_manipulator
    {
     width ( int w ){};
     virtual Sheet&do_it(Sheet&s_)const
     {
        return s_;
     }
     
    };
    Ou une approche générique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    template<class unary_manipulator>
    Sheet& operator << (Sheet& O, unary_manipulator S)
    {
        return S(O);
    }
    struct width
    {
     width ( int w ){};
     Sheet&operator()(Sheet&s_)const
     {
        return s_;
     }
    };

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 125
    Par défaut
    merci pour ta réponse, dans la mesure ou c'est juste un exercice de style, je vais garder ta seconde solution

    en ce qui concerne ma solution, il manquait le const sur mon foncteur
    pour que ca passe avec le compilateur.

    encore merci

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

Discussions similaires

  1. Creation et manipulation d'une liste a plusieurs elements
    Par student_ dans le forum Débuter
    Réponses: 6
    Dernier message: 21/02/2011, 08h44
  2. creation et manipulation matrice
    Par amineca dans le forum MATLAB
    Réponses: 2
    Dernier message: 07/10/2009, 08h18
  3. creation et manipulation d'images
    Par jonezy0621 dans le forum Débuter
    Réponses: 26
    Dernier message: 23/03/2009, 22h15
  4. Réponses: 7
    Dernier message: 17/09/2008, 13h39
  5. Creation d une clee dans la registry en VC++
    Par rico27fr dans le forum MFC
    Réponses: 4
    Dernier message: 30/05/2002, 12h36

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