• # Moui

    Posté par (site web personnel) . En réponse au journal Toujours plus proche du Python avec C++. Évalué à 5.

    J'aime bien l'idée mais j'y vois pas mal d'inconvénients :)

    • Je plussois sur l'intérêt de documenter le site d'appel, mais en l'état on n'a plus les noms ni les types des paramètres dans la signature de l'appelé.
    • Second problème, l'appelé est forcément template. Ais-je envie d'augmenter mes temps de compilation pour pouvoir nommer les paramètres côté appelant ? Probablement non.
    • Comment passer des paramètres par adresse ? Combien de copies des paramètres sont faites entre l'appelant et l'appelé ? Sur cet exemple j'ai déjà une copie superflue :
    #include "../include/params14.hpp"
    #include <cstdio>
    using namespace params14::literals;
    int copy_count = 0;
    int assign_count = 0;
    struct copy_counter
    {
     int value;
     copy_counter(int v) : value(v) {}
     copy_counter(const copy_counter& that)
     : value(that.value)
     {
     ++copy_count;
     }
     copy_counter& operator=(const copy_counter& that)
     {
     value = that.value;
     ++assign_count;
     return *this;
     }
    };
    template<typename... KWArgs>
    void foo(KWArgs&&... kwargs)
    {
     auto args = params14::parse(std::forward<KWArgs>(kwargs)...);
     printf("value=%d\n", args.get("p"_kw).value);
    }
    void bar(const copy_counter& p)
    {
     printf("value=%d\n", p.value);
    }
    int main(int argc, char** argv)
    {
     copy_counter p(argc);
     foo("p"_kw=p);
     printf("named:\ncopies=%d\nassignments=%d\n", copy_count, assign_count);
     copy_count = 0;
     assign_count = 0;
     bar(p);
     printf(
     "good old syntax:\ncopies=%d\nassignments=%d\n",
     copy_count, assign_count);
     return 0;
    }