Partage
  • Partager sur Facebook
  • Partager sur Twitter

J'ai des questions à propos de c++20

Les constexpr et fonctions virtuelles.

Sujet résolu
    1 août 2021 à 17:15:01

    Salut! Je suis entrain de tester des choses pour voir les limites du c++20 et, j'ai quelque questions :

    Dans ce bout de code :

    Compteur compteur;
    
    template <size_t I>
    struct TypeIdentifier  {
        static constexpr auto ID = I;
    };
    
    struct animal  {
        virtual constexpr size_t getID() const = 0;
    };
    
    struct dog : animal, TypeIdentifier<compteur.Next()> {
        void applySpecifiBehaviour() {
            std::cout<<"Aboye"<<std::endl;
        }
        constexpr size_t getID() const {
            return ID;
        }
    };
    struct cat : animal, TypeIdentifier<compteur.Next()> {
        void applySpecifiBehaviour() {
            std::cout<<"Miaule"<<std::endl;
        }
        constexpr size_t getID() const {
            return ID;
        }
    };
    struct bird : animal, TypeIdentifier<compteur.Next()> {
        void applySpecifiBehaviour() {
            std::cout<<"Fait cui cui"<<std::endl;
        }
        constexpr size_t getID() const {
            return ID;
        }
    };
    
    int main() {
        /*DynamicTuple systems;
        DynamicTuple scenes;
        DynamicTuple renderers;
        DynamicTuple components;
        TestAppl test(systems, scenes, renderers, components);*/
    
        std::vector<animal*> animals;
        cat c;
        dog d;
        bird b;
        std::cout<<b.getID()<<std::endl;
        DynamicTuple dt;
        auto dt1 = dt.add(c);
        auto dt2 = dt1.add(d);
        auto dt3 = dt2.add(b);
        animals.push_back(&c);
        animals.push_back(&d);
        animals.push_back(&b);
    
        for (unsigned int i = 0; i < animals.size(); i++) {
    
            dt3.get<animals[i]->getID()>(0).applySpecifiBehaviour();
        }
        return 0;
    }

    Il me dit que l'opérator[] de std::vector n'est pas constexpr pourtant en c++20, les functions de std::vector sont sensées être constexpr non ?

    Ou alors il faut que les éléments dans le std::vector soient constexpr ?



    • Partager sur Facebook
    • Partager sur Twitter
      2 août 2021 à 9:45:26

      https://en.cppreference.com/w/cpp/container/vector/operator_at

      Vérifiez que vous avez bien activé C++20 dans votre compilateur et que cette fonctionnalité de C++20 est bien déjà supporté par votre compilateur/librairie standard.

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        2 août 2021 à 12:37:48

        Bonjour j'ai vérifié et cette fonctionnalité n'est pas supportée par mon compilateur elle n'est supportée que par msvc.
        • Partager sur Facebook
        • Partager sur Twitter

        J'ai des questions à propos de c++20

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        • Editeur
        • Markdown