UTILISATION DES TYPELIST EN C++

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 20 août 2011 à 23:27
wyden Messages postés 1 Date d'inscription jeudi 6 mars 2008 Statut Membre Dernière intervention 21 août 2011 - 21 août 2011 à 17:33
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/53487-utilisation-des-typelist-en-c

wyden Messages postés 1 Date d'inscription jeudi 6 mars 2008 Statut Membre Dernière intervention 21 août 2011
21 août 2011 à 17:33
Bien toutes tes questions on une simple réponse.

Le développement ce n'est pas facile, les nouveaux utilisent des libs, des systemes qui existe deja sans avoir une idé global de comment coder soit meme un mécanisme du meme type que ce qu'ils utilisent.

Ce que j'ai mis la ce n'est pas à utiliser dans un projets, c'est une manière d'ajouter des idées dans la tête des nouveaux développeurs.

Mais merci pour tes critiques, je t'assure que ca aidera les autres.

Bonne continuation.
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
20 août 2011 à 23:27
Bonjour.

Je ne sais pas trop par quoi commencer. Il y a plein de choses qui me gênent dans ce code.

Je ne vois pas l'utilité d'avoir recodé un système déjà existant en moins bien. Quel intérêt quand on a un dynamic_cast et des typeid ? (http://en.wikipedia.org/wiki/Typeid). On peut déjà faire tout ce que tu fais sans ajouter d'instructions intrusives dans son code.

De plus, au niveau architecture logiciel, dès le moment où toute classe hérite d'une super classe, c'est qu'il y a 99% de chance que la conception soit mauvaise.
J'ai aussi du mal à comprendre pourquoi il y a autant de macro, alors qu'une bonne partie du code aurait pu être écrite sous la forme de template.
Enfin, avoir des méthodes au nom identique mais à la casse différente, c'est très très risqué, et source d'ambiguïtés. D'ailleurs pourquoi avoir deux fois la même méthode dans ta première classe ?

Au niveau du code lui même, j'ai quelque remarques:
- Évite les using namespace, voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
- En C++, quand une méthode prend en argument un void*, c'est très très louche. On utilise généralement une méthode template pour éviter cela.
- Utilise des cast C++ et non des casts C. Le cast C est un fourre-tout qui ne te permet pas d'avoir un contrôle sur le type de cast que tu fais (renseigne toi sur: reinterpret_cast, static_cast, et dynamic_cast). Ici j'aurais plutôt fait un static_cast.
- Pour savoir de manière portable si la recherche dans un std::string a réussi, on ne regarde pas si res >= 0 mais si res != std::string::npos. D'ailleurs la méthode find renvoie normalement dans la plupart des implémentations de la STL, un size_t qui est non signé (donc récupérer cela avec un int signé c'est moyen).
- Pas besoin de else après un return (le return est débranchant)
- Au lieu de faire des MyObject::cast(&class1) ? "true" : "false" utilise directement des: std::boolalpha << MyObject::cast(&class1)
- Enfin, au lieu de faire des milliards de std::cout, n'en fait qu'un seul et chaîne tes actions...
Ex:
cout << object.className() << endl;
cout << class1.className() << endl;
cout << class2.className() << endl;

Devient:
std::cout << object.className() << std::endl
<< class1.className() << std::endl
<< class2.className() << std::endl;

Pour conclure, si ton but est uniquement de montrer une technique à travers un exemple, précise que cet exemple ne doit pas être utilisé en production, mais qu'il faut privilégier les mécanismes déjà existant du langage.
Ce sont ici des débutants qui lisent ces codes, et ça serait dommage qu'ils pensent que c'est la bonne méthode pour vérifier si une classe héritent d'une autre. (Soit dit en passant, si le programme est bien conçu, on n'a jamais besoin de savoir si une classe hérite d'une autre, le polymorphisme fait son travail naturellement).
Rejoignez-nous