Salut,
je suis tomber sur un code et je n’arrive absolument pas à comprendre comment il fait ce qu’il fait.
Une âme charitable pourrait-elle m’expliquer ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <functional> #include <string> #include <iostream> struct Polly { template<typename T, typename U> auto operator()(T t, U u) const -> decltype(t + u) { return t + u; } }; int main() { auto polly = std::bind(Polly(), std::placeholders::_1, "confusing"); std::cout << polly(4) << polly(std::string(" this is ")) << std::endl; } |
la sortie étant using this is confusing
Le truc c’est que poly(4) ressort using càd : confusing moins les 4 première lettre
Mais si on reconstruit la méthode en mettant les bons types on a T = int et U = char*[] ou std::string je ne sais pas trop.
Mais int + string ou même int + char*[] et il n’existe pas d’opérateur + pour ces types. Donc ce ne doit pas être les bons types
Mes questions sont donc, quels sont les types de T et U lors de l’appel polly(4)
et pourquoi on a un substring de "confusing" lors d’une addition.
PS: Si vous avez des codes un peu tordu dans le style pour voir comment fonctionne le C++ en détails , je suis preneur