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 :

Faire comme boost::variant


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Inscrit en
    Avril 2005
    Messages
    1 110
    D�tails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par d�faut Faire comme boost::variant
    Voici ce que je d�fini
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    template <typename A1>
    struct mastruct
    {
    	A1 f1;
    };
     
    template <typename A1,typename A2>
    struct mastruct
    {
    	A1 f1;
    	A2 f2;
    };
    Le compilo n'accepte pas. Pourtant les boost::variant sont parfaitement accept�s.
    Comprend pas...

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

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par d�faut
    Variant ne fait pas �a... Ils jouent � grand coup de macro pour les param�tres templates mais y'a qu'une seule classe ,)

  3. #3
    Alp
    Alp est d�connect�
    Expert confirm�

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    template <
          typename T0_
        , BOOST_VARIANT_ENUM_SHIFTED_PARAMS(typename T)
        >
    class variant
    cf : http://svn.boost.org/svn/boost/trunk...nt/variant.hpp

    Faut scroller jusqu'au milieu environ pour tomber sur �a.

  4. #4
    Membre �clair�
    Inscrit en
    Avril 2005
    Messages
    1 110
    D�tails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par d�faut
    J'ai vu le code de boost avec son usage abusif de preproc... sans trop comprendre.
    Je pense cependant qu'il y a plusieurs d�finitions de variant. Il y en a une vingtaine, le fichier include s'incluant lui-m�me une vingtaine de fois avec � chaque fois un param en plus dans BOOST_VARIANT_ENUM_SHIFTED_PARAMS() (mettez plus de 20 param�tres template dans une instance de variant<> et �a p�te).
    Mais faisons simple.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    boost::variant<int,std::string> v1;
    boost::variant<long,short,char> v2;
    Le code qui pr�c�de est accept� par les compilos. J'aimerais juste imiter quelque chose de semblable. Vous voyez comment faire, m�me de mani�re minimaliste ? Une simple classe qui accepte 1 ou 2 param�tres template sera bien.

  5. #5
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par d�faut
    Si tu est allergique � toute la machinerie de boost.prepocessor (parce que c'est �a qu'utilise variant derri�re) et que tu veux �tre portable alors tu peux utiliser les typelists.
    Pour l'allusion � la portabilit� je parle des variadics templates de la prochaine norme :p. (support� par gcc).

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    template<typename T, typename U>
    struct Typelist
    {
         typedef T head;
         typedef U tail;
    };
     
    struct NullType {};
     
    #define Typelist_1(arg1)  Typelist<arg1, NullType>
    #define Typelist_2(arg1, arg2) Typelist<arg1, Typelist_1(arg2)>
    ....
    Et si tu veux �viter du NIH alors tu peux regarder du c�t� de loki :p

    Remarque que si c'est juste pour deux arguments templates alors peut �tre tu pourrais envisager un truc comme �a ? :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    template <typename T1, typename T2 = NullType>
    struct foo { 
    //...
    };

  6. #6
    Membre �clair�
    Inscrit en
    Avril 2005
    Messages
    1 110
    D�tails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par d�faut
    Je ne souhaite pas faire mais comprendre.
    Tu as cependant un peu �clair� ma lanterne, boost fait quelque chose comme ceci avec les variants (il n'utilise pas d'include r�cursifs comme je le pensais, j'ai confondu avec l'include in_place_factory.hpp).
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    struct nulltype {};
     
    template <typename A1,typename A2=nulltype,typename A3=nulltype>
    struct mastruct
    {
     union {
    	A1 f1;
    	A2 f2;
    	A3 f3;
     };
    };
    boost::variant va jusque typename A20 si j'ai bien vu.

    La "machinerie" boost.preproc j'essaie aussi de la comprendre. Je n'arrive pas � faire l'�mulation d'un FOREACH.

    PS: qu'est-ce NIH ?

Discussions similaires

  1. Faire comme les methode de JOptionPane
    Par romuluslepunk dans le forum AWT/Swing
    R�ponses: 6
    Dernier message: 09/06/2006, 22h30
  2. Que faire comme �tude ?
    Par Xo Sonic oX dans le forum Etudes
    R�ponses: 7
    Dernier message: 03/06/2005, 15h51
  3. Que peux-t'on faire comme application ?
    Par lalystar dans le forum Java ME
    R�ponses: 2
    Dernier message: 11/12/2004, 05h36
  4. [maintenance][performance] Que faire comme maintenance ?
    Par woodwai dans le forum PostgreSQL
    R�ponses: 5
    Dernier message: 06/11/2003, 15h39

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