sans templates ? pas de std::map ? pas de std::vector?
Tu peux utiliser la STL sans maintenir toi-même de classes templates.
sans pointeurs nus, arf, donc pas de pointeur du tout, vu que pas de template...
On voit encore des projets assumés dans un langage appelé 'C/C++', qui est vu comme du C amélioré. Mais non, en général, à moins que quelqu'un ait une expérience contraire, j'ai rarement vu toutes les exclusions en même temps. J'ai aussi oublié 'sans exceptions', par exemple. Et j'imagine qu'avec C++14 et C++17, il risque d'y avoir encore plus de syntaxes proscrites (sans lambda, etc).
les templates bien utilisés permettent d'éviter la duplication de code, et en améliorent la maintenabilité.
Si tu parles de conteneurs, alors oui, certainement, dans une certaine mesure (mais c'est quand même difficile de ne pas trouver son bonheur dans la STL, si tu es amené à coder toi-même ton propre conteneur, c'est aussi peut-être que tu es en train de faire quelque chose de compliqué).
En fait, (c'est un avis personnel qui est bien sûr hautement contestable), je n'ai jamais été emballé par l'idée de mettre autre chose que des types de base dans les classes templates. L'utilisation des templates comme alernative à la POO, je ne comprends pas l'intérêt (bien sûr, vtable etc., mais les cas où ça pose de vrais problèmes de perfs sont quand même assez restreints). J'ai même l'impression que la philosophie de la POO se perd complètement quand on adopte des pratiques basées sur les templates. Si tu crées une fonction qui prend une référence vers un objet de classe A, elle va aussi prendre tous les types dérivés de A, et seulement eux, c'est super clair. Si tu passes par des templates, alors n'importe quel objet qui passe la compilation (qui fournit des méthodes qui ont le même nom que ce qui est utilisé dans le template) peut être passé en argument, il n'y a plus aucune vérification de la logique voulue par le programmeur, je trouve ça absurde.
Et en plus, comme je n'ai dit plus haut, la logique de déporter tout un tas de choses à la compilation me rappelle des centaines d'exemples de blocages à la con (pas possible d'avoir plus de 1000 lignes dans le tableur, pas possible d'avoir une résolution qui dépasse 1000px, etc) parce que quelqu'un avait comme un boulet instantié des tableaux avec des tailles constantes. C'est quelque chose qui avait complètement disparu en C++ avec l'avènement des conteneurs STL, et que je sens revenir rapidement avec la généralisation des constrexp et autres méthodes de méta-programmation où rien n'est dynamique, et où il va falloir recompiler à chaque fois qu'on veut changer un paramètre.
[^] # Re: Namespace bits ?
Posté par arnaudus . En réponse au journal Jouons avec le ``switch`` et C++17. Évalué à 4. Dernière modification le 08 mars 2018 à 09:51.
Tu peux utiliser la STL sans maintenir toi-même de classes templates.
On voit encore des projets assumés dans un langage appelé 'C/C++', qui est vu comme du C amélioré. Mais non, en général, à moins que quelqu'un ait une expérience contraire, j'ai rarement vu toutes les exclusions en même temps. J'ai aussi oublié 'sans exceptions', par exemple. Et j'imagine qu'avec C++14 et C++17, il risque d'y avoir encore plus de syntaxes proscrites (sans lambda, etc).
Si tu parles de conteneurs, alors oui, certainement, dans une certaine mesure (mais c'est quand même difficile de ne pas trouver son bonheur dans la STL, si tu es amené à coder toi-même ton propre conteneur, c'est aussi peut-être que tu es en train de faire quelque chose de compliqué).
En fait, (c'est un avis personnel qui est bien sûr hautement contestable), je n'ai jamais été emballé par l'idée de mettre autre chose que des types de base dans les classes templates. L'utilisation des templates comme alernative à la POO, je ne comprends pas l'intérêt (bien sûr, vtable etc., mais les cas où ça pose de vrais problèmes de perfs sont quand même assez restreints). J'ai même l'impression que la philosophie de la POO se perd complètement quand on adopte des pratiques basées sur les templates. Si tu crées une fonction qui prend une référence vers un objet de classe A, elle va aussi prendre tous les types dérivés de A, et seulement eux, c'est super clair. Si tu passes par des templates, alors n'importe quel objet qui passe la compilation (qui fournit des méthodes qui ont le même nom que ce qui est utilisé dans le template) peut être passé en argument, il n'y a plus aucune vérification de la logique voulue par le programmeur, je trouve ça absurde.
Et en plus, comme je n'ai dit plus haut, la logique de déporter tout un tas de choses à la compilation me rappelle des centaines d'exemples de blocages à la con (pas possible d'avoir plus de 1000 lignes dans le tableur, pas possible d'avoir une résolution qui dépasse 1000px, etc) parce que quelqu'un avait comme un boulet instantié des tableaux avec des tailles constantes. C'est quelque chose qui avait complètement disparu en C++ avec l'avènement des conteneurs STL, et que je sens revenir rapidement avec la généralisation des constrexp et autres méthodes de méta-programmation où rien n'est dynamique, et où il va falloir recompiler à chaque fois qu'on veut changer un paramètre.