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

Langage C++ Discussion :

Comment appeler une fonction sur un object en lui passant un élement d'un tuple ?


Sujet :

Langage C++

  1. #1
    Invité
    Invité(e)
    Par défaut Comment appeler une fonction sur un object en lui passant un élement d'un tuple ?
    Salut,

    J'ai fais une classe similaire à boost::variant, et j'utilise une bibliothèque (la bibliothèque multiple dispatch) pour le pattern visitor et la génération automatique de hiérarchie, pour le variant, je recherche l'index du type passé, pour ensuite le passer au foncteur du visiteur, mais, cela ne compile pas.

    Code cpp : 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    #ifndef VARIANT_HPP
    #define VARIANT_HPP
    #include "multdispvisitors.hpp"
    namespace odfaeg {
        template <class T, class Tuple>
        struct Index;
        template <class T, class... Types>
        struct Index<T, std::tuple<T, Types...>> {
            static const std::size_t value = 0;
        };
     
        template <class T, class U, class... Types>
        struct Index<T, std::tuple<U, Types...>> {
            static const std::size_t value = 1 + Index<T, std::tuple<Types...>>::value;
        };
        template <typename... T>
        class Family : T... {
        };
        template <typename... T>
        class Visitable : accept_visitor<Family<T...>, T...> {
        };
        template <typename... T>
        class Variant : acceptable<Family<T...>, T>... {
        public :
            template <typename V>
            Variant (V value) {
                std::get<V>(tuple) = value;
                index = Index<V, decltype(tuple)>::value;
            }
            template <typename A>
            void apply_visitor() const {
                 A action();
                 action.apply(std::get<index>(tuple));
            }
        private :
            std::tuple<T...> tuple;
            std::size_t index;
        };
        template <typename A, typename... T>
        class Visitor : dispatchable<A, Family<T...>> {
     
        };
    }
    #endif

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /usr/local/include/odfaeg/Core/variant.h|33|error: use of ‘this’ in a constant expression|
    Comment dois je passer cela au foncteur à mon visiteur ?

    Merci d'avance.

    PS : Le visiteur doit hériter de Visitor et prend en paramètre template le nom de la classe qui sert de visiteur, ainsi que les types du variant.
    Et là dedans je déclare tout les foncteurs pour tout les types du variant.

  2. #2
    En attente de confirmation mail

    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 : 33
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    action.apply(std::get<index>(tuple));
    Aucun sens, index n'est pas une expression constante (ie connu à la compilation), elle n'a rien à faire en argument template.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Ouf!

    J'ai trouvé un code qui fait ce que je voulais faire.

    http://thenewcpp.wordpress.com/2012/...variant-class/

    Sinon, j'aurai galéré. :/

    Je passe donc en résolu.

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

Discussions similaires

  1. Réponses: 24
    Dernier message: 26/05/2006, 15h08
  2. Réponses: 2
    Dernier message: 13/03/2006, 13h54
  3. comment appeler une fonction JAVA en JAVASCRIPT ?
    Par heleneh dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 13/09/2005, 12h21
  4. comment appeler une fonction JAVA en JAVASCRIPT ?
    Par heleneh dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/09/2005, 12h04
  5. Comment appeler une fonction JavaScript depuis Delphi ?
    Par Alfred12 dans le forum Web & réseau
    Réponses: 4
    Dernier message: 17/06/2005, 18h15

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