• # c'est un tuple que tu veux non?

    Posté par . En réponse au message Petite question de c++ pour égayer votre vendredi. Évalué à 5. Dernière modification le 31 mai 2021 à 11:08.

    par contre, y'a pas vraiment d'initialisation du tuple; va falloir que les constructeurs par défaut fassent leur taff :)

    #include <iostream>
    #include <tuple>
    #include <unordered_set>
    struct bark {
     virtual void ouaf() = 0;
    };
    struct Plop : public bark {
     Plop() { std::cout << "Plop" << std::endl; } 
     void ouaf(){ std::cout << " ouaf plop" << std::endl; }
    };
    struct Plip : public bark {
     Plip() { std::cout << "Plip" << std::endl; } 
     void ouaf(){ std::cout << " ouaf plip" << std::endl; }
    };
    template<typename...Inputs>
    class Function {
     std::tuple<Inputs...> in;
     void register_inputs() {
     std::apply([&](auto&&... args) {((inputs.insert(&args)), ...);}, in);
     }
     std::unordered_set<bark*> inputs;
    public: 
    Function() { register_inputs() ;}
     void carp() {
     for(auto& chien : inputs) {
     chien->ouaf();
     }
     }
    };
    int main()
    {
     Function<Plop,Plip,Plip, Plop> inputs;
     inputs.carp();
    }

    mais tu peux très bien filer le tuple au constructeur, et le l'affecter au membre in; puis faire l'enregistrement; note bien, à partir du moment où l'on stock le tout dans un tuple, l'usage du set peut potentiellement être superflu; ça dépends des traitement derrière; l'avantage du set c'est que partout on aura un set de machin alors que pour les tuples ce sera autant de types différents.

    lorsque je code j'essaye au maximum d'éviter de devoir ajouter des morceau à 4/5 endroits dès que je veux ajouter un truc.

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent