Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Templates et portabilité

18 réponses
Avatar
Christian PANEL
Bonjour,

Je developpe en C et C++ depuis plusieurs années avec des Frameworks plus
classiques sous windows (MFC et OWL) et essaye de me mettre à la page
notamment en étudiant la STL que je n'utilisais pas.

En glanant des informations de ci de là, Je suis tombé sur des affirmations
qui semblent sérieuses (site de wxWindows) qui me posent questions et sur
lesquelles j'aimerais avoir des précisions et l'avis de personnes éclairées
:
En effet on peut lire :
"[i]Templates

wxWidgets does not use templates (except for some advanced features that are
switched off by default) since it is a notoriously unportable feature.[/i]"

Si j'ai effectivement constaté avec des compilateurs aniens que les
templates posaient problème, je suis curieux de savoit actuellement quels
sont les écueils qui existent sur les templates entre différents
compilateurs. Avez vous des exemples précis de la non portabilité de codes
écrits avec les templates ? Si vous en avez constaté, est-il possible
d'écrire un code portable avec les templates et si oui quelles sont les
précautions à prendre pour assurer un maximum de portabilité.

J'ai constaté également que le code écrit avec des templates de manière
assez poussé était d'une part assez illisible, et d'autre part difficilement
déboguable de par son manque de lisibilité et surtout de par les messages
souvent complètement incompréhensibles qu'envoient les compilateurs y
compris parfois pour de simples erreurs. Qu'en pensez-vous ? Faut-il bannir
les templates ? (dommage?)

J'aimerais également avoir votre avis sur l'utilisation de la STL pour
développer un code portable.

Merci beaucoup pour vos éclaircissement.

8 réponses

1 2
Avatar
Jeremie
Fabien LE LEZ avait soumis l'idée :
compilateurs avaient quelques soucis avec les templates. Mais bon, on
parle là de 1992. Nous sommes maintenant en 2009.



D'ailleurs, dans les versions recentes (et futures), les templates
arrivent. Il a été recement question d'abandonner le support de
quelques compilateurs afin de pouvoir utiliser ces fonctionnalité de
c++. Car le problème vient de là : supporter un maximum de compilateur.
--
Jérémie
Avatar
James Kanze
On Aug 29, 11:57 am, Marc wrote:
James Kanze wrote:
> Je n'en sais rien, mais Sun CC, c'est bien un compilateur
> répandu et important. Et oui, il vient avec une version de
> la STLport, aussi. Mais celle-ci est tellement boguée
> qu'elle est inutilisable.



?
Dans mon expérience, il manque plein de choses dans Cstd, mais
stlport4 fonctionne bien.



Il en manque, mais ce qu'il y a fonctionne plus ou moins. (Il y
a quelque gros bogues quand même.) En STLport, c'est des core
dumps en pagaille, avec du code légal.

> Tu peux facilement écrire autour de quelque chose qui manque
> -- après tous, tu écrivais bien des programmes avant qu'il a
> été ajouté ailleurs. Mais certains bogues sont carrément
> incontournable, et rend des pans entiers de la bibliothèque
> (comme <locale>) complètement inutilisable.



Tu fais référence au fait que "C" est la seule locale
supportée par stlport4 ? C'est effectivement un problème.



Non, je fais référence que ça provoque des core dumps. Il y a
des problèmes sérieux dans les initialisations, qui fait que tu
finis toujours par te servir d'un locale ou d'un fact qui n'a
pas encore été construit.

> Il y aussi VC++ 6. Périmé, certes, mais il sert encore à
> certains endroits.



Pitié pour le programmeur...



Il ne marchait pas mal dans le temps. Mais effectivement, nos
attentes ont évoluées.

> La question finale, évidemment, c'est jusqu'à où pousser la
> portabilité. Si des versions relativement récentes de g++ et
> de VC++ te suffisent, ce n'est pas un problème.



Ça suffit quand même dans beaucoup de cas.



Ça n'a jamais suffit dans les boîtes où j'ai travaillé. Mais il
y a effectivement des cas où la portabilité n'est pas vraiment
démandée.

>> L'impossibilité de convertir les std::pair entre eux est
>> pénible aussi (l'avantage c'est qu'on n'utilise du coup jamais
>> map::insert(make_pair(a,b)) avec sa copie inutile).



> C'est marrant ; je ne crois pas d'avoir eu des problèmes à cet
> égard. Mais il faut dire que j'ai toujours privilégé le style :
> unMap.insert( MapType::value_type( cle, valeur ) ) ;
> sur le make_pair. (Je ne sais pas pourquoi, d'ailleurs, mais tu
> viens de m'en donner une raison de plus.)



Note qu'en C++0X la copie inutile disparaît, au moins...
(enfin je crois)



Certes, mais d'ici à ce qu'on peut s'en servir portablement...

> [en ce concerne les fonctions membre...]
>> Pour écrire du code portable, tester reste une des
>> meilleures solutions. MSVC, g++ et un compilateur
>> utilisant EDG (Intel par exemple) forment un échantillon
>> raisonnable.



> Si tu vises la portabilité maximum, pas vraiment, parce
> qu'ils sont tous les trois assez à jour, et à l'exception
> d'export, assez proche de la norme. Or, si tu vises la
> portabilité, il te faut des anciens compilateurs, ou ceux
> qui n'implémente pas encore toutes les nouveautés.



L'OP semblait viser une portabilité raisonnable mais pas
maximale. En commençant un développement maintenant, les
compilateurs les plus antiques auront presque le temps de
disparaître.



Ne prends pas tes souhaits pour la réalité:-). Il y a encore des
utilisateurs de VC++ 6, et j'imagine, de g++ 2.95.2. Et où je
viens de travailler, on n'a abandonné Sun CC 4.1 qu'il y a un an
ou deux.

[...]
> Un peu plus, c'est peu dire. En ce qui concerne les
> collections et les algorithmes, ça va encore, mais les
> iostream et les locales sont quasiment inutilisable.



Les locales : stlport4 n'a que "C" et Cstd supporte mal le
multi-thread, mais pour iostream, je suis surpris, je ne me
souviens pas de problème particulier avec stlport4.



Je ne me rappelle pas le problème exactement, mais les iostream
se servent des locales, donc, un problème dans les locales peut
bien rendre les iostream inutilisable aussi.

> Il y a aussi le problème de pourquoi tu veux être portable.
> Dans la pratique, sous Solaris, on utilise g++, plutôt que
> Sun CC, si on peut. Seulement, très souvent, on doit linké
> avec des bibliothèques tièrces, qui sont la plupart du temps
> livrées seulement en version Sun CC, avec la bibliothèque
> Sun par défaut. Dans la pratique, je n'ai jamais connu un
> contexte professionnel où Sun CC plus STLport avait un sens.



Sur sparc, on évite le backend de gcc si on peut, pour des
raisons de performance évidentes. Ça peut vouloir dire
utiliser gccfss (front-end gcc, back-end Sun Studio), mais
c'est un produit assez marginal, et avec des perspectives
d'avenir limitées pour des raisons de licence à partir de
gcc-4.4. Sinon, c'est Sun Studio. En l'absence de
bibliothèques tièrces binaires liées à Cstd, il est beaucoup
plus facile de porter un code C++ standard à stlport4 (ça va
probablement juste marcher) qu'à Cstd, et les performances
sont souvent meilleures.



Les performances de Cstd sont en effet un disastre. C'est une
des raisons pourquoi certains groupes où j'étais ont tardé à
quitter 4.1 (qui lui marchait pas trop mal) ; ils ont fini par
franchir le pas parce que les bibliothèques tièrces n'étaient
plus livrées pour 4.1. Et si on n'est pas lié par des
bibliothèques tièrces, g++ résoud le problème très bien. (Il
faut dire que nos applications ne sont pas en général limitées
par la performance du CPU ; c'est les entrées/sorties qui
déterminent la performance.)

Dans une perspective d'avenir, Opensolaris intègre
actuellement la libstdcxx d'Apache (=Roguewave moderne) qui
sera la bibliothèque standard C++ par défaut dans Solaris, et
est recommandée par les développeurs de Sun Studio aux gens
qui postent dans les forums pour des problèmes avec
Cstd/stlport4.



Le problème, c'est toujours qu'il faut un certain temps pour que
les évolutions se rétrouvent dans l'industrie.

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Avatar
Marc Boyer
Le 28-08-2009, Christian PANEL a écrit :

"Marc Boyer" a écrit dans le message de
news: h78bnm$lbm$
Recadrons le sujet: tu parles bien d'utiliser la STL, pas
d'écrire tes propres templates ? Dans ce cas, je ne vois pas
quel pourrait être le souci de portabilité: chaque compilo
C++ est fournis avec une version de la STL, et arrive
à la compiler. Non ?



je parle des deux !



Utiliser la STL et écrire ses propres templates ne sont
pas du tout le même problème.

Commençons par "utiliser la STL".

deux versions de la STL ne sont pas obligées de fonctionner
identiquement...



Heuh... Il peut toujours rester des bugs partout, mais en 2009,
la STL, elle me paraît bien stable et connue et implantée.

en théorie oui, mais en pratique ? On peut dire alors que l'implémentation
alpha est une mauvaise implémentation et ne pas l'utiliser ou on peut se
dire "on attend encore quelques années que tout le monde se soit aligné"



Oui, on peut aussi travailler en ASM 8086 en se méfiant de tous
ses langages modernes et aux compilos bugées que sont C, Fortran, Lisp.
(je n'évoque même pas ses trucs de jeunes fous que sont Java, C++,
Ada...)

Il y a des gens qui "jouent" avec les template. A mon sens, les
templates
C++ ont ouvert de nouveaux paradigmes de programmation, et les usages
ne sont pas encore figés.



oui, c'est sur, mais peut être est-ce du au fait que les templates ont eu du
mal justement d'une part à se "standardiser" et d'autre part à s'exempter de
nombreux bugs et illogismes, non ?



A mon sens, c'est surtout du au fait que quand arrive un nouvel outil,
on ne sait pas bien comment l'utiliser. Les "Design Pattern" sont par
exemple des guides d'usage de l'OO.

Sans parle du fait qu'entre l'arrivée d'une techno et la mise sur
le marché de bouquins pédagogiques sur le sujet, il y a un temps. Surtout
s'il n'y a pas de vendeur de logiciel qui pousse derrière.

Quand on commence avec les templates, en effet, il faut arriver
à sélectionner ses lectures, éviter les gens qui disent "regarder,
c'est super, on arrive même à faire des trucs comme ça", et commencer
par des usages moins entousiates, pragrammatiques, et utiles.



oui, c'est pour cela que j'essaie de repartir à zéro et de me refaire une
idée des possibilités offertes
(qui sont trés attrayantes)



Je vais revenir sur deux choses distinctes: utiliser la STL et
développer ses propres templates.

Utiliser la STL ne me semble pas bien compliqué (une fois compris
le principe d'itérateur et d'objet fonction -- operator() ), et quand
même bien utile. C'est à mon sens ce que tout dévelopeur C++ formé
de nos jours devrait savoir en sortant de l'école.

En fait, c'est utiliser autre chose que la STL qui demande justification.

Développer ses propres template demande plus de lecture et d'expérience.
Je manque d'expérience pour en parler. Mes propres classes template
m'ont beaucoup appris, mais ne sauraient passer en usage pour d'autres.

Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0
Avatar
Christian PANEL
"Marc Boyer" a écrit dans le message de
news: h7g4j7$tl6$
Le 28-08-2009, Christian PANEL a écrit :
Heuh... Il peut toujours rester des bugs partout, mais en 2009,
la STL, elle me paraît bien stable et connue et implantée.



merci, c'est ce que je voulais savoir de personnes ayant l'habitude de
l'utiliser

Oui, on peut aussi travailler en ASM 8086 en se méfiant de tous
ses langages modernes et aux compilos bugées que sont C, Fortran, Lisp.
(je n'évoque même pas ses trucs de jeunes fous que sont Java, C++,
Ada...)




oui :o) ... non, ce que je voulais dire c'est que j'ai une approche assez
pragmatique, et calcule d'une part le temps d'apprentissage de "nouvelles"
technologies face au temps gagné grace à ces nouvelles technologies.
Typiquement pour donner un exemple : le cas des IDE qui font tout soit
disant trés bien et qui oblige l'utilisateur à passer un temps
incommensurable à déboguer ces derniers ou à apprendre toutes les limites du
système quand une ligne de commande, certes un peu plus lente et moins
pratique, mais plus sure, eut suffit.
Je commence seulement depuis quelques semaines à me lancer dans la STL parce
que je me dis qu'il faut quand même que je m'y mette mais me rends compte
que ca ne va pas être aussi rapide que cela et que je vais devoir mettre une
série de garde fous au cas ou la STL ne réagisse pas comme je l'ai escompté
au départ : il m'est indiqpensable de créer des objets créés/gérés par
plusieurs container et donc de manière indirecte => au moins un foncteur
pour la comparaison pour chaque container, peut être une gestion d'objets
partagés par compteurs : bref ce n'est pas simple et pas sans risque pour
celui qui ne connait pas la STL au départ et je me pose la question de son
avantage face à des structures de containers complexes (et obligatoirement
d'objets indirects).
Bref, si je me lance dedans c'est plus par gout de connaitre cette
biblithèque que par espoir de gagner du temps...

Il y a des gens qui "jouent" avec les template. A mon sens, les
templates
C++ ont ouvert de nouveaux paradigmes de programmation, et les usages
ne sont pas encore figés.



oui, c'est sur, mais peut être est-ce du au fait que les templates ont eu
du
mal justement d'une part à se "standardiser" et d'autre part à s'exempter
de
nombreux bugs et illogismes, non ?



A mon sens, c'est surtout du au fait que quand arrive un nouvel outil,
on ne sait pas bien comment l'utiliser. Les "Design Pattern" sont par
exemple des guides d'usage de l'OO.



je suis d'accord avec toi, je "connais" la bibliothèque depuis peu mais peut
me rendre compte que pour quelqu'un la connaissant trés bien, elle peut
apporter je pense de la rapidité de programmation et d'éxécution, une
standardisation mais surement pas une compression du code (tu me diras
:c'est le propre des templates). Reste à voir si elle ne contient pas trop
de "quirks" pour me la rendre moins sympathique qu'une bibliothèque dédiée à
mon application mon généraliste mais plus lisible, déboguable (et peut être
plus efficace)
Mais je n'aurai une réponse qu'après une grande habitude et pratique de
cette bibliothèque qui comme le disait je ne sais plus qui a le gros
avantage de porter le nom "standard".


Je vais revenir sur deux choses distinctes: utiliser la STL et
développer ses propres templates.

Utiliser la STL ne me semble pas bien compliqué (une fois compris
le principe d'itérateur et d'objet fonction -- operator() ), et quand
même bien utile. C'est à mon sens ce que tout dévelopeur C++ formé
de nos jours devrait savoir en sortant de l'école.



pour utiliser un container, suis d'accord avec toi
(le concept d'itérateur et de container existait avant la naissance de la
STL dans des bibliothèques de templates "maison" évidemment moins évoluées
que désormais)


En fait, c'est utiliser autre chose que la STL qui demande justification.



.. ou developper des structures complexes de containers par la STL me semble
t-il...


Développer ses propres template demande plus de lecture et d'expérience.
Je manque d'expérience pour en parler. Mes propres classes template
m'ont beaucoup appris, mais ne sauraient passer en usage pour d'autres.




en tout cas merci pour ton point de vue qui me permet avec d'autres de me
faire une idée sur ce que je peux attendre de celle-ci.
Avatar
Marc Boyer
Le 31-08-2009, Christian PANEL a écrit :

"Marc Boyer" a écrit dans le message de
news: h7g4j7$tl6$
Le 28-08-2009, Christian PANEL a écrit :
Heuh... Il peut toujours rester des bugs partout, mais en 2009,
la STL, elle me paraît bien stable et connue et implantée.



merci, c'est ce que je voulais savoir de personnes ayant l'habitude de
l'utiliser



Ceci dit, je n'en utilise qu'une petite partie (conteneurs, algo),
et la discussion entre James et Marc évoque des parties de la STL
dont je ne soupsonnais pas l'existence.

Oui, on peut aussi travailler en ASM 8086 en se méfiant de tous
ses langages modernes et aux compilos bugées que sont C, Fortran, Lisp.
(je n'évoque même pas ses trucs de jeunes fous que sont Java, C++,
Ada...)



oui :o) ... non, ce que je voulais dire c'est que j'ai une approche assez
pragmatique, et calcule d'une part le temps d'apprentissage de "nouvelles"
technologies face au temps gagné grace à ces nouvelles technologies.



Oui, moi aussi. Mais il faut aussi savoir avancer.
Quand est-ce le moment se sauter le pas ? C'est toujours difficile
à dire en général.

Typiquement pour donner un exemple : le cas des IDE qui font tout soit
disant trés bien et qui oblige l'utilisateur à passer un temps
incommensurable à déboguer ces derniers ou à apprendre toutes les limites du
système quand une ligne de commande, certes un peu plus lente et moins
pratique, mais plus sure, eut suffit.



En même temps, la completion automatique des noms de méthodes par
déduction du type de l'opérande, c'est pratique.

Je commence seulement depuis quelques semaines à me lancer dans la STL parce
que je me dis qu'il faut quand même que je m'y mette mais me rends compte
que ca ne va pas être aussi rapide que cela et que je vais devoir mettre une
série de garde fous au cas ou la STL ne réagisse pas comme je l'ai escompté
au départ : il m'est indiqpensable de créer des objets créés/gérés par
plusieurs container et donc de manière indirecte => au moins un foncteur
pour la comparaison pour chaque container, peut être une gestion d'objets
partagés par compteurs : bref ce n'est pas simple et pas sans risque pour
celui qui ne connait pas la STL au départ et je me pose la question de son
avantage face à des structures de containers complexes (et obligatoirement
d'objets indirects).
Bref, si je me lance dedans c'est plus par gout de connaitre cette
biblithèque que par espoir de gagner du temps...



Quelle est l'alternative ? Faire sa propre liste chainée de pointeurs
en void* ?
De manière générale, la sémantique d'identité et de copie est un problème
difficile. Et l'usage d'une bibliothèque extérieure suppose de définir les
besoins *et* de connaitre le comportement de la bibliothèque. Quand on
code soit même, seul la définition des besoins est présente, et en plus,
on peut plus ou moins y penser au fur et à mesure qu'on code...
Mais c'est une chose plus générale en C++. Dès qu'on écrit une classe,
on doit (ou on devrait) se poser les questions relatives aux constructeurs
de copie, de destruction, d'identité.

Dans ton cas, ce de sera surement pas des conteneurs de ton type de base T
que tu utiliseras, mais des conteneurs de pointeurs intelligents sur T
(auto_ptr<T> ou shared_ptr<T>).

Bon, ok, écrire
std::vector< shared_ptr< MaClasse > >
ça peut sembler syntaxiquement lourd, mais après, tout vient avec.


Après, c'est comme tout outil un peut puissant et configurable:
il faut en avoir l'usage pour que le temps d'apprentissage se révèle
payant à terme.

Il y a des gens qui "jouent" avec les template. A mon sens, les
templates
C++ ont ouvert de nouveaux paradigmes de programmation, et les usages
ne sont pas encore figés.



oui, c'est sur, mais peut être est-ce du au fait que les templates ont eu
du
mal justement d'une part à se "standardiser" et d'autre part à s'exempter
de
nombreux bugs et illogismes, non ?



A mon sens, c'est surtout du au fait que quand arrive un nouvel outil,
on ne sait pas bien comment l'utiliser. Les "Design Pattern" sont par
exemple des guides d'usage de l'OO.



je suis d'accord avec toi, je "connais" la bibliothèque depuis peu mais peut
me rendre compte que pour quelqu'un la connaissant trés bien, elle peut
apporter je pense de la rapidité de programmation et d'éxécution,



Ben, des conteneurs, des algos de tri, on en a (quasiment) toujours
besoin. Donc soit on écrit la sienne, soit on utilise une non standard,
soit on utilise la standard.
Les 3 cas ont des avantages et des inconvénients.

En ce qui me concerne, la STL a été conçue par des gens plus expérimentés
que moi, puis testée par des dizaines de milliers de programmeurs, donc
elle a des avantages clairs.

Reste à voir si elle ne contient pas trop
de "quirks" pour me la rendre moins sympathique qu'une bibliothèque dédiée à
mon application mon généraliste mais plus lisible, déboguable (et peut être
plus efficace)
Mais je n'aurai une réponse qu'après une grande habitude et pratique de
cette bibliothèque qui comme le disait je ne sais plus qui a le gros
avantage de porter le nom "standard".



L'avantage du standard, c'est que plus c'est utilisé, plus l'investissement
est rentable.

En fait, c'est utiliser autre chose que la STL qui demande justification.



.. ou developper des structures complexes de containers par la STL me semble
t-il...



Oui, la STL ne fait pas tout. Elle n'a pas d'arbre, pas de graphe.
J'ai eut à coder ce genre de choses, et je me suis pris les pieds
dans le tapis. Mais j'ai appris de mes erreurs, et je n'accuserai
pas la STL, plutôt ma volonté simpliste de me dire "je sais le
faire en C, ça me prendra pas plus de 2 jours de le faire en C++/STL/template".

Après, j'ai codé des structures partagées, et en mettant les objets
contenus (en propriété) dans une liste, et des vecteurs d'itérateurs
sur la liste pour des sous-listes, ça c'est fait très vite.

Développer ses propres template demande plus de lecture et d'expérience.
Je manque d'expérience pour en parler. Mes propres classes template
m'ont beaucoup appris, mais ne sauraient passer en usage pour d'autres.



en tout cas merci pour ton point de vue qui me permet avec d'autres de me
faire une idée sur ce que je peux attendre de celle-ci.



Avec plaisir,
Marc Boyer, croyant au C++ mais plus pratiquant
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0
Avatar
Christian PANEL
"Marc Boyer" a écrit dans le message de
news: h7gl0i$47m$
En ce qui me concerne, la STL a été conçue par des gens plus expérimentés
que moi, puis testée par des dizaines de milliers de programmeurs, donc
elle a des avantages clairs.



et oui ! et pourtant comment alors expliquer qu'il existent encore des bugs
dans certaines bibliothèques et même certains compilateurs de plus de 10 ans
d'ages (les bugs) ... ?!

L'avantage du standard, c'est que plus c'est utilisé, plus
l'investissement
est rentable.



oui, on a un minimum de garantie jusqu'à ce qu'on change de standard ;o)

Oui, la STL ne fait pas tout. Elle n'a pas d'arbre, pas de graphe.
J'ai eut à coder ce genre de choses, et je me suis pris les pieds
dans le tapis. Mais j'ai appris de mes erreurs, et je n'accuserai
pas la STL, plutôt ma volonté simpliste de me dire "je sais le
faire en C, ça me prendra pas plus de 2 jours de le faire en
C++/STL/template".



oui, tu touches là ce que je redoute ! ...


Après, j'ai codé des structures partagées, et en mettant les objets
contenus (en propriété) dans une liste, et des vecteurs d'itérateurs
sur la liste pour des sous-listes, ça c'est fait très vite.



Avatar
Marc Boyer
Le 31-08-2009, Christian PANEL a écrit :

"Marc Boyer" a écrit dans le message de
news: h7gl0i$47m$
En ce qui me concerne, la STL a été conçue par des gens plus expérimentés
que moi, puis testée par des dizaines de milliers de programmeurs, donc
elle a des avantages clairs.



et oui ! et pourtant comment alors expliquer qu'il existent encore des bugs
dans certaines bibliothèques et même certains compilateurs de plus de 10 ans
d'ages (les bugs) ... ?!



Dans mes codes aussi il doit rester des bugs, mais personne ne les
a encore mis à jour ;-)
De ce que je connais, la non-correction de bugs s'explique souvent
par le fait qu'il y a tellement de code qui se base du le comportement
bugué qu'on considère plus génant de le corriger que de le laisser.
Mais je ne suis pas expert.

L'avantage du standard, c'est que plus c'est utilisé, plus
l'investissement
est rentable.



oui, on a un minimum de garantie jusqu'à ce qu'on change de standard ;o)



La communauté C/C++ aime bien la compatibilité ascendante.
Le risque que le nouveau standard "casse" des choses et invalide un
apprentissage me semble faible.

Oui, la STL ne fait pas tout. Elle n'a pas d'arbre, pas de graphe.
J'ai eut à coder ce genre de choses, et je me suis pris les pieds
dans le tapis. Mais j'ai appris de mes erreurs, et je n'accuserai
pas la STL, plutôt ma volonté simpliste de me dire "je sais le
faire en C, ça me prendra pas plus de 2 jours de le faire en
C++/STL/template".



oui, tu touches là ce que je redoute ! ...



Dans ce cas, oui, je peux te dire que si tu veux essayer toutes
les jolies fonctionnalités que tu as entrapercu sur un bout de
code non trivial sans passer par la lecture d'ouvrages et les tests sur des
mini-exemples, tu risques de te planter (en tout cas, si tu
es fiaits comme moi).
La prog template C++, ça demande d'apprendre avant de faire.

La encore, je parle de faire ses propres classes templates,
pas d'utiliser la STL.

Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0
Avatar
James Kanze
On Aug 31, 11:19 am, Marc Boyer
wrote:
Le 28-08-2009, Christian PANEL a écrit :
> "Marc Boyer" a écrit dans le messa ge de
>news: h78bnm$lb__BEGIN_MASK_n#9g02mG7!__...__END_MASK_i?a63jfAD$ .cict.fr...
>> Recadrons le sujet: tu parles bien d'utiliser la STL, pas
>> d'écrire tes propres templates ? Dans ce cas, je ne vois pas
>> quel pourrait être le souci de portabilité: chaque compilo
>> C++ est fournis avec une version de la STL, et arrive
>> à la compiler. Non ?



> je parle des deux !



Utiliser la STL et écrire ses propres templates ne sont
pas du tout le même problème.



Commençons par "utiliser la STL".



> deux versions de la STL ne sont pas obligées de fonctionner
> identiquement...



Heuh... Il peut toujours rester des bugs partout, mais en 2009,
la STL, elle me paraît bien stable et connue et implantée.



Oui et non. Il existe encore bien des implémentations plus ou
moins périmées, selon les plateformes qu'on ciblent. Et même
conforme, il y a pas mal des comportements « non-spécifiés »,
genre -- v.end() (où v est un std::vector). Voire indéfinis
(mais qui pourrait marcher avec certaines implémentations).

--
James Kanze
1 2