Casse tête la méta programmation en c++ difficile de savoir ce que le code va générer comme code par exemple template<class C> struct unpack { template <typename seq, typename... XS> using f = unpack<seq>::template f<C,XS...>; si on a unpack<typelist<int, double, std::string>> ça va générer typelist<int, double, std::string>::typelist<std::string, double, int> si je comprend bien parce que unpack<typelist<int, double, std::string>> c'est typelist<int, double, std::string> et f c'est typelist<typelist<int, double, std::string>> qu'il déroule en typelist<typelist<double, std::string>, int> qu'il déroule en typelist<typelist<std::string>, double, int> qu'il déroule en typelist<std::string, double, int> ce qui donne la liste à l'envers mais comment savoir que le premier paramètre C va prendre la valeur de typelist <double, std::string> et que le premier élément va être extrait, puis le deuxième puis le troisième, pas clair cette syntaxe!!! Je hais le c++ moderne n'y a t'il pas moyen faire comme on fait avec les variables c'est à dire un truc du genre fonctions using f = { using typelist = C; for (unsigned int i=0;i<typelist.size();i++){ typelist.push_front(typelist[i]);} return typelist;} ça aurait été beaucoup moins casse tête !!! Là j'ai carrément envie de créer un language de script parce que c'est vraiment trop casse gueule c'est difficile de savoir quel sera le code que le compilateur va générer et si il y a des classes conditionnelles c'est pire encore par exemple imaginons le cas où je dois récupérer tout les types qui sont des placeholders, les trier et éliminer les doublons je ferais quelque chose du genre using placeholders={for (unsigned int i=0;i<sizeof...(args);i++){ if(args[i].find(placeholders)){bool contains = false; for (unsigned int j=0;j<sorted.size()&&!contains;j++) { if(args[i]==contains[j]){contains=true;} }if(!contains){template<size_t, typename t> pl= args[i]; sorted[pl::index] = args[i]; } return sorted; je pense que ça serait bien que je crée un programme qui fasse un truc du genre parce que avec la syntaxe du c++ moderne, je ne saurai vraiment pas le faire.
Je n'en suis pas rendu là mais je pense qu'on peut prédire son code s'il est bien pensé. Pour la syntaxe du C++ moderne, j'ai déjà dit que les entrées-sorties formatées n'étaient pas super: std::cout << ... << std::endl; Si on veut faire du format fixe comme en C (ou en Cobol ...) ce n'est pas évident: printf("%04d\n", variable);
Le Tout est souvent plus grand que la somme de ses parties.
Ce que tu critiques n'as rien à voir le C++ moderne, mais la lourdeur d'écriture de méta-programmation basée sur les types (à confronter avec celle basée sur les valeurs et constexpr qui n'est pas toujours mieux).
Ce que tu critiques n'as rien à voir le C++ moderne, mais la lourdeur d'écriture de méta-programmation basée sur les types (à confronter avec celle basée sur les valeurs et constexpr qui n'est pas toujours mieux).
× 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.
Discord NaN. Mon site.
Le Tout est souvent plus grand que la somme de ses parties.