Le blog d'un informaticien passionné de partage, d'échanges et surtout, pas si zéro que ça.
Enfin ça ne sera pas disponible avec le standard de 2017 (malheureusement !), mais on peut déjà faire mu-muse avec, notamment avec GCC 7 et Clang 4, que l’on peut retrouver sur Wandbox. Il faudra simplement compiler avec l’option -fconcepts.
Les joies des templates
Pour bien comprendre pourquoi les concepts sont si intéressants en C++, il suffit de s’être mangé une erreur de templates dans les dents au moins une fois. Prenons cet exemple tiré de Stack Overflow.
L’erreur, postée sur SO, vient du simple fait que l’objet a n’est pas du type attendu (std::vector<int>). Et les messages à rallonges n’aident pas à comprendre, tant chez GCC que chez Clang.
Les concepts : une TS pleine d’espoir
Évidemment, il se peut que l’implémentation, la syntaxe, etc changent, ou bien que de nouvelles choses soient ajoutées, puisque ce n’est qu’une spécification technique et absolument pas quelque chose de définitif. Mais on peut faire déjà des choses intéressantes, comme le code ci-dessous.
Dans ce code, je décide que je ne veux en argument qu’une structure contenant un entier i. Si je décide de passer un pointeur, par exemple, voilà ce que j’obtiens comme erreur.
Eh oui ! un pointeur n’est pas un entier, tout simplement. Et si je passe un entier mais qui n’a pas le bon identifiant ?
C’est donc vraiment quelque chose de puissant qui se dessine. On peut ainsi rêver d’avoir la puissances des templates C++ avec les contraintes comme en C#, pour un codage et des messages d’erreurs plus simples. Voici, en guise de conclusion, des liens vers tout un tas de ressources qui m’ont aidé à appréhender les concepts.