Partage
  • Partager sur Facebook
  • Partager sur Twitter

Le compilateur choisi la mauvaise fonction.

Lors de la spécialisation de template.

    11 avril 2022 à 20:36:25

    Bonjour!

    J'ai écrit une spécialisation template pour gérer le cas ou mon tuple dynamique est vide.

    template <typename... Signature, typename DynamicTuple, typename System, size_t... I, typename... Params, class = typename std::enable_if_t<(sizeof...(Signature) == 0 || DynamicTuple::nbTypes() == 0)>>
                    void apply_impl(EntityId entityId, DynamicTuple& dt, System& system, std::tuple<Params...>& params, std::index_sequence<I...>) {
                    }
                    template <typename... Signature, typename DynamicTuple, typename System, size_t... I, typename... Params, class...D, class = typename std::enable_if_t<(sizeof...(Signature) > 0 && DynamicTuple::nbTypes() > 0)>>
                    void apply_impl(EntityId entityId, DynamicTuple& dt, System& system, std::tuple<Params...>& params, std::index_sequence<I...>) {
                        auto tp = std::make_tuple(getAgregate<std::tuple_element_t<I, std::tuple<Signature...>>>(dt, entityId)...);
                        system(tp, entityId, params);
                    }

    Mais même lorsque mon dynamic tuple est vide (et donc contient 0 type) il choisir l'autre version et me met une erreur :

    /usr/include/c++/11/utility|118|  required by substitution of ‘template<long unsigned int __i, class _Tp> using __tuple_element_t = typename std::tuple_element::type [with long unsigned int __i = 18446744073709551615; _Tp = std::tuple<std::vector<odfaeg::core::DynamicTuple<>, std::allocator<odfaeg::core::DynamicTuple<> > > >]’|

    On voit clairement ici que dynamic tuple est vide et pourtant il m'affiche une erreur avec une valeur très élevée pour i comme si il allait dans la dernière fonction hors moi je ne veux pas qu'il aille dans la dernière fonction mais la première.

    Merci.


    • Partager sur Facebook
    • Partager sur Twitter
      12 avril 2022 à 9:58:51

      Salut,

      Je crois que je ne m'y ferai jamais a ce genre de syntaxes....

      Autant quelques template de temps en temps, quelques bouts de code un peu folkloriques je ne dis pas... Mais la je trouve cela illisible.

      Que veux tu faire ? Pourquoi un tuple "dynamique" ? Pour ranger n'importe quoi ? Un peu comme les demandes de tableaux hétérogènes qu'on voit passer parfois ?

      Souvent, quand on demande un truc beaucoup trop générique, c'est qu'on a un problème de conception en amont. Que veux tu faire concrètement ?

      • Partager sur Facebook
      • Partager sur Twitter

      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

        12 avril 2022 à 13:11:19

        Je veux faire un conteneur qui contient les composants associés aux entités et appliquer de manière générique un système aux composants.
        • Partager sur Facebook
        • Partager sur Twitter
          12 avril 2022 à 13:40:07

          J'ai rarement vu autant de templates dans si peu de code C++.
          • Partager sur Facebook
          • Partager sur Twitter

          git is great because Linus did it, mercurial is better because he didn't.

            12 avril 2022 à 13:59:54

            OmbreNoire a écrit:

            Je veux faire un conteneur qui contient les composants associés aux entités et appliquer de manière générique un système aux composants.


            Concrètement, que veux tu faire comme programme qui exploite cela ? 

            Parce qu'il faut d'abord raisonner en ce demandant ce qu'on veut faire concrètement, et ensuite voir les outils dont on a besoin, et non l'inverse.

            • Partager sur Facebook
            • Partager sur Twitter

            Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

              12 avril 2022 à 15:17:02

              Bonjour je souhaiterais faire un moteur de jeux comme Unity.

              Maintenant j'ai entendu parlé de ent qui fait cela mais je n'ai pas trouvé de documentation pour savoir comment on utilise cette lib.

              • Partager sur Facebook
              • Partager sur Twitter
                12 avril 2022 à 15:23:01

                OmbreNoire a écrit:

                Bonjour je souhaiterais faire un moteur de jeux comme Unity.

                Maintenant j'ai entendu parlé de ent qui fait cela mais je n'ai pas trouvé de documentation pour savoir comment on utilise cette lib.


                https://www.youtube.com/watch?v=D4hz0wEB978
                • Partager sur Facebook
                • Partager sur Twitter
                  12 avril 2022 à 16:52:08

                  Ok super c'est en Anglais mais avec le code je comprends, par contre, je ne vois pas du tout comment passer les composants aux systèmes.

                  C'est pour ça que j'ai fais une fonction template qui prend en paramètre template une signature c'est à dire les la liste des composants à récupérer.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Le compilateur choisi la mauvaise fonction.

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown