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

Boost C++ Discussion :

boost::any ou boost::variant ?


Sujet :

Boost C++

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 162
    Par défaut boost::any ou boost::variant ?
    Bonjour,

    Je voudrais savoir exactement quand utiliser l'un ou l'autre de ces objets.
    Si je comprends bien la doc, boost::any sert plutot dans le cas ou l'on voudrait utiliser un type de style void* tandis que boost::variant sert plutot dans le cas ou l'on voudrait utiliser une union.

    Mais à part ca, quelqu'un saurait dans quel cas precis il faut utiliser l'un et pas l'autre ? C'est juste pour ma culture perso, je n'ai pas de problemes specifiques avec le concept.

    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,
    Pour ma part, je dirais que
    -> Utilises Boost.Any, si tu va manipuler vraiment tout et n'importe quoi ;
    -> Utilises Boost.Variant si tu sais quels sont les types d'objets que tu vas manipuler.
    En fait, à l'usage, je me rend compte que je n'utilises quasiment jamais Boost.Any mais presque toujours Boost.Variant. La plus part du temps, je sais identifier quels sont les types que je veux réellement manipuler.
    Ensuite (en attendant les variatic template), Boost.Variant est limité à BOOST_VARIANT_LIMIT_TYPES types différents positionnée à 10 par défaut. Si d'aventure tu avais besoin de beaucoup plus, il serait certainement plus simple d'écrire un Boost.Any.

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 162
    Par défaut
    OK, merci beaucoup pour cette reponse tres claire.

  4. #4
    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
    Ca n'est pas loin s'en faut parole d'évangile. D'autres ont peut être une pratique différente.

  5. #5
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Salut,

    Même réponse que 3DArchi, avec un petit addendum : si tu l'utilises dans du code qui a besoin de perfs (genre un interpréteur dont tu veux obtenir des perfs correctes), boost::any peut se révéler un mauvais choix dû à l'utilisation intensive d'allocations dynamiques (s'il y a un moyen de les contourner, je ne le connais pas).

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

Discussions similaires

  1. Interpréter une valeur d'un boost::any
    Par j-jorge dans le forum C++
    Réponses: 8
    Dernier message: 15/01/2011, 16h33
  2. avantages de boost::any par rapport à void *
    Par vandamme dans le forum Boost
    Réponses: 2
    Dernier message: 05/03/2009, 00h46
  3. boost::any: classe de configuration partielle.
    Par 3DArchi dans le forum Boost
    Réponses: 4
    Dernier message: 26/09/2008, 12h04

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