depuis que je programme en C++, je n'ai pas eu beaucoup l'occasion de
développer des templates. Je comprends bien leur usage dans les classes
de la STL que j'utilise et j'ai aussi eu l'occasion de developper des
templates similaires. Mais je me demande comment les templates
s'inscrivent dans le processus d'abstraction du langage et notamment
dans le processus d'héritage : faire dériver une classe d'un template,
ou un template d'une classe par exemple (besoin, interet, avantages,
inconvénients...). Connaissez vous des pointeurs ou références qui
pourraient m'aider à comprendre cela ?
Merci et bonne journée,
Yann
--
Yann Renard - To send me an email, remove no-spam sectionS :)
depuis que je programme en C++, je n'ai pas eu beaucoup l'occasion de développer des templates. Je comprends bien leur usage dans les classes de la STL que j'utilise et j'ai aussi eu l'occasion de developper des templates similaires. Mais je me demande comment les templates s'inscrivent dans le processus d'abstraction du langage et notamment dans le processus d'héritage : faire dériver une classe d'un template, ou un template d'une classe par exemple (besoin, interet, avantages, inconvénients...). Connaissez vous des pointeurs ou références qui pourraient m'aider à comprendre cela ?
Le livre "Modern C++ Design", de Andrei Alexandrescu.
La premiere fois que je l'ai lu, j'ai saute au plafond en me disant "WAW!". Je n'estimais pas une seule seconde tout ce qu'on pouvait faire avec les templates.
En fait, le langage template du C++ est turing complete, donc tu peux theoriquement tout faire avec. Par exemple, generer une liste de nombre premier par le compilateur et a la compilation (mais tu peux aussi ecrire un programme qui ne s'arrete jamais de compiler).
Lire aussi "C++ template, the complete guide" de Vandevoorde et Josuttis.
-- John Deuf
Yann Renard :
depuis que je programme en C++, je n'ai pas eu beaucoup l'occasion de
développer des templates. Je comprends bien leur usage dans les classes
de la STL que j'utilise et j'ai aussi eu l'occasion de developper des
templates similaires. Mais je me demande comment les templates
s'inscrivent dans le processus d'abstraction du langage et notamment
dans le processus d'héritage : faire dériver une classe d'un template,
ou un template d'une classe par exemple (besoin, interet, avantages,
inconvénients...). Connaissez vous des pointeurs ou références qui
pourraient m'aider à comprendre cela ?
Le livre "Modern C++ Design", de Andrei Alexandrescu.
La premiere fois que je l'ai lu, j'ai saute au plafond en me disant
"WAW!". Je n'estimais pas une seule seconde tout ce qu'on pouvait faire
avec les templates.
En fait, le langage template du C++ est turing complete, donc tu peux
theoriquement tout faire avec.
Par exemple, generer une liste de nombre premier par le compilateur et a
la compilation (mais tu peux aussi ecrire un programme qui ne s'arrete
jamais de compiler).
Lire aussi "C++ template, the complete guide" de Vandevoorde et Josuttis.
depuis que je programme en C++, je n'ai pas eu beaucoup l'occasion de développer des templates. Je comprends bien leur usage dans les classes de la STL que j'utilise et j'ai aussi eu l'occasion de developper des templates similaires. Mais je me demande comment les templates s'inscrivent dans le processus d'abstraction du langage et notamment dans le processus d'héritage : faire dériver une classe d'un template, ou un template d'une classe par exemple (besoin, interet, avantages, inconvénients...). Connaissez vous des pointeurs ou références qui pourraient m'aider à comprendre cela ?
Le livre "Modern C++ Design", de Andrei Alexandrescu.
La premiere fois que je l'ai lu, j'ai saute au plafond en me disant "WAW!". Je n'estimais pas une seule seconde tout ce qu'on pouvait faire avec les templates.
En fait, le langage template du C++ est turing complete, donc tu peux theoriquement tout faire avec. Par exemple, generer une liste de nombre premier par le compilateur et a la compilation (mais tu peux aussi ecrire un programme qui ne s'arrete jamais de compiler).
Lire aussi "C++ template, the complete guide" de Vandevoorde et Josuttis.
-- John Deuf
Gabriel Dos Reis
John Deuf writes:
[...]
| En fait, le langage template du C++ est turing complete, donc tu peux | theoriquement tout faire avec.
Une question est si cela est souhaitable dans un programme non-jouet.
-- Gaby
John Deuf <nomail@dontuseit.com> writes:
[...]
| En fait, le langage template du C++ est turing complete, donc tu peux
| theoriquement tout faire avec.
Une question est si cela est souhaitable dans un programme non-jouet.
| En fait, le langage template du C++ est turing complete, donc tu peux | theoriquement tout faire avec.
Une question est si cela est souhaitable dans un programme non-jouet.
-- Gaby
fabien.chene.nospam
Yann Renard
writes:
Mais je me demande comment les templates s'inscrivent dans le processus d'abstraction du langage et notamment dans le processus d'héritage : faire dériver une classe d'un template, ou un template d'une classe par exemple (besoin, interet, avantages, inconvénients...). Connaissez vous des pointeurs ou références qui pourraient m'aider à comprendre cela ?
Le Barton & Nackman, _Scientific and engineering C++_ , malgré son âge (*), explique remarquablement l'utilisation conjointe de l'héritage et de la généricité.
(*) Il date d'avant 98, époque à laquelle le C++ était un tantinet différent.
Mais je me demande comment les templates s'inscrivent dans le
processus d'abstraction du langage et notamment dans le processus
d'héritage : faire dériver une classe d'un template, ou un template
d'une classe par exemple (besoin, interet, avantages,
inconvénients...). Connaissez vous des pointeurs ou références qui
pourraient m'aider à comprendre cela ?
Le Barton & Nackman, _Scientific and engineering C++_ , malgré son
âge (*), explique remarquablement l'utilisation conjointe de l'héritage
et de la généricité.
(*) Il date d'avant 98, époque à laquelle le C++ était un tantinet
différent.
Mais je me demande comment les templates s'inscrivent dans le processus d'abstraction du langage et notamment dans le processus d'héritage : faire dériver une classe d'un template, ou un template d'une classe par exemple (besoin, interet, avantages, inconvénients...). Connaissez vous des pointeurs ou références qui pourraient m'aider à comprendre cela ?
Le Barton & Nackman, _Scientific and engineering C++_ , malgré son âge (*), explique remarquablement l'utilisation conjointe de l'héritage et de la généricité.
(*) Il date d'avant 98, époque à laquelle le C++ était un tantinet différent.
-- Fab
Fabien LE LEZ
On Fri, 12 May 2006 00:18:49 +0200, (Fabien CHÊNE) :
Mais les avis divergent, beauté artistique selon l'un, usine à gaz ou complexe pétro-chimique selon les autres.
La beauté d'un code réside dans sa simplicité. Si une technique avancée rend un code plus facile à comprendre, alors elle est positive.
On Fri, 12 May 2006 00:18:49 +0200, (Fabien CHÊNE) :
Mais les avis divergent, beauté
artistique selon l'un, usine à gaz ou complexe pétro-chimique selon
les autres.
La beauté d'un code réside dans sa simplicité.
Si une technique avancée rend un code plus facile à comprendre, alors
elle est positive.
On Fri, 12 May 2006 00:18:49 +0200, (Fabien CHÊNE) :
Mais les avis divergent, beauté artistique selon l'un, usine à gaz ou complexe pétro-chimique selon les autres.
La beauté d'un code réside dans sa simplicité. Si une technique avancée rend un code plus facile à comprendre, alors elle est positive.
fabien.chene.nospam
Gabriel Dos Reis writes:
| En fait, le langage template du C++ est turing complete, donc tu peux | theoriquement tout faire avec.
Une question est si cela est souhaitable dans un programme non-jouet.
Des techniques de méta-programmation (genre manipulation tordue de mpl::list pour générer des variants), que je considérais un peu comme de la masturbation intellectuelle amusante, m'a pourtant réellement été utile dans un projet sérieux. Mais les avis divergent, beauté artistique selon l'un, usine à gaz ou complexe pétro-chimique selon les autres.
-- Fab
Gabriel Dos Reis <gdr@integrable-solutions.net> writes:
| En fait, le langage template du C++ est turing complete, donc tu peux
| theoriquement tout faire avec.
Une question est si cela est souhaitable dans un programme non-jouet.
Des techniques de méta-programmation (genre manipulation tordue de
mpl::list pour générer des variants), que je considérais un peu comme
de la masturbation intellectuelle amusante, m'a pourtant réellement
été utile dans un projet sérieux. Mais les avis divergent, beauté
artistique selon l'un, usine à gaz ou complexe pétro-chimique selon
les autres.
| En fait, le langage template du C++ est turing complete, donc tu peux | theoriquement tout faire avec.
Une question est si cela est souhaitable dans un programme non-jouet.
Des techniques de méta-programmation (genre manipulation tordue de mpl::list pour générer des variants), que je considérais un peu comme de la masturbation intellectuelle amusante, m'a pourtant réellement été utile dans un projet sérieux. Mais les avis divergent, beauté artistique selon l'un, usine à gaz ou complexe pétro-chimique selon les autres.
-- Fab
Sylvain
John Deuf wrote on 11/05/2006 20:50:
[...] Mais je me demande comment les templates s'inscrivent dans le processus d'abstraction du langage et notamment dans le processus d'héritage [...]
je me demandais un peu aussi, et attendais goulument les réponses.
[...] donc tu peux theoriquement tout faire avec.
assurement, mais _pratiquement_ ?
generer une liste de nombre premier par le compilateur et a la compilation
fichtre ! ça tombe bien mon HSM est tombé en panne, c'est quelle page du bouquin le générateur de (vrais, hein) nombres premiers de 4096 bits?
(mais tu peux aussi ecrire un programme qui ne s'arrete jamais de compiler).
ben passionant alors ! presque autant qu'un include circulaire mais avec des mots à la mode; on est pas rendu !...
Sylvain.
John Deuf wrote on 11/05/2006 20:50:
[...] Mais je me demande comment les templates
s'inscrivent dans le processus d'abstraction du langage et notamment
dans le processus d'héritage [...]
je me demandais un peu aussi, et attendais goulument les réponses.
[...] donc tu peux theoriquement tout faire avec.
assurement, mais _pratiquement_ ?
generer une liste de nombre premier par le compilateur et a la compilation
fichtre ! ça tombe bien mon HSM est tombé en panne, c'est quelle page du
bouquin le générateur de (vrais, hein) nombres premiers de 4096 bits?
(mais tu peux aussi ecrire un programme qui ne s'arrete
jamais de compiler).
ben passionant alors ! presque autant qu'un include circulaire mais avec
des mots à la mode; on est pas rendu !...
[...] Mais je me demande comment les templates s'inscrivent dans le processus d'abstraction du langage et notamment dans le processus d'héritage [...]
je me demandais un peu aussi, et attendais goulument les réponses.
[...] donc tu peux theoriquement tout faire avec.
assurement, mais _pratiquement_ ?
generer une liste de nombre premier par le compilateur et a la compilation
fichtre ! ça tombe bien mon HSM est tombé en panne, c'est quelle page du bouquin le générateur de (vrais, hein) nombres premiers de 4096 bits?
(mais tu peux aussi ecrire un programme qui ne s'arrete jamais de compiler).
ben passionant alors ! presque autant qu'un include circulaire mais avec des mots à la mode; on est pas rendu !...
Sylvain.
Gabriel Dos Reis
(Fabien CHÊNE) writes:
| Gabriel Dos Reis writes: | | > | En fait, le langage template du C++ est turing complete, donc tu peux | > | theoriquement tout faire avec. | > | > Une question est si cela est souhaitable dans un programme non-jouet. | | Des techniques de méta-programmation (genre manipulation tordue de | mpl::list pour générer des variants),
si je dois écrire aujourd'hui du code à moyenne ou longue durée de vie, la dernière chose dont j'ai envie c'est que le maintainer soit « clever » pour le comprendre. [Note que le maintainer peut être moi-même, deux ans après :-(]
| Gabriel Dos Reis <gdr@integrable-solutions.net> writes:
|
| > | En fait, le langage template du C++ est turing complete, donc tu peux
| > | theoriquement tout faire avec.
| >
| > Une question est si cela est souhaitable dans un programme non-jouet.
|
| Des techniques de méta-programmation (genre manipulation tordue de
| mpl::list pour générer des variants),
si je dois écrire aujourd'hui du code à moyenne ou longue durée de
vie, la dernière chose dont j'ai envie c'est que le maintainer soit
« clever » pour le comprendre.
[Note que le maintainer peut être moi-même, deux ans après :-(]
| Gabriel Dos Reis writes: | | > | En fait, le langage template du C++ est turing complete, donc tu peux | > | theoriquement tout faire avec. | > | > Une question est si cela est souhaitable dans un programme non-jouet. | | Des techniques de méta-programmation (genre manipulation tordue de | mpl::list pour générer des variants),
si je dois écrire aujourd'hui du code à moyenne ou longue durée de vie, la dernière chose dont j'ai envie c'est que le maintainer soit « clever » pour le comprendre. [Note que le maintainer peut être moi-même, deux ans après :-(]
-- Gaby
kanze
Sylvain wrote:
John Deuf wrote on 11/05/2006 20:50:
[...] Mais je me demande comment les templates s'inscrivent dans le processus d'abstraction du langage et notamment dans le processus d'héritage [...]
je me demandais un peu aussi, et attendais goulument les réponses.
Il n'y a pas qu'Andrei qui a traité le problème -- Dave Abraham aussi (mais je ne l'ai pas encore lu), et il y a plus longtemps, Barton et Nackmann (que je conseillerais fortement, même aujourd'hui).
[...] donc tu peux theoriquement tout faire avec.
assurement, mais _pratiquement_ ?
Ça dépend du compilateur -- s'il est conforme, tu *peux* tout faire avec. Si on le doit, en revanche, et bien une autre question, qu'a très bien posé Gabriel. On peut dire que le méta-langage des templates, c'est aussi lisible que l'APL, et aussi succinct que le Cobol.
generer une liste de nombre premier par le compilateur et a la compilation
fichtre ! ça tombe bien mon HSM est tombé en panne, c'est quelle page du bouquin le générateur de (vrais, hein) nombres premiers de 4096 bits?
Même ça, c'est possible. Mais évidemment, le temps de compilation risque d'être un peu long.
(mais tu peux aussi ecrire un programme qui ne s'arrete jamais de compiler).
ben passionant alors ! presque autant qu'un include circulaire mais avec des mots à la mode; on est pas rendu !...
En fait, pour faire une boucle, il faut utiliser la récursion. Et ça m'étonnerait que le compilateur fasse une optimisation de la récursion finale en ce cas-là. Ce qui veut dire qu'en fait, on ne boucle pas beaucoup avant que le compilateur dit « out of memory », ou quelque chose du genre.
Mais en tant que jouet, c'est ultra amusant.
(En fait, il y a certaines techniques de la méta-programmation qui peuvent servir dans du code réel. Mais il ne faut vraiment pas pousser, quitte à faire du code « write only », qui met des heures à compiler.)
-- James Kanze GABI Software 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
Sylvain wrote:
John Deuf wrote on 11/05/2006 20:50:
[...] Mais je me demande comment les templates
s'inscrivent dans le processus d'abstraction du langage et notamment
dans le processus d'héritage [...]
je me demandais un peu aussi, et attendais goulument les
réponses.
Il n'y a pas qu'Andrei qui a traité le problème -- Dave Abraham
aussi (mais je ne l'ai pas encore lu), et il y a plus longtemps,
Barton et Nackmann (que je conseillerais fortement, même
aujourd'hui).
[...] donc tu peux theoriquement tout faire avec.
assurement, mais _pratiquement_ ?
Ça dépend du compilateur -- s'il est conforme, tu *peux* tout
faire avec. Si on le doit, en revanche, et bien une autre
question, qu'a très bien posé Gabriel. On peut dire que le
méta-langage des templates, c'est aussi lisible que l'APL, et
aussi succinct que le Cobol.
generer une liste de nombre premier par le compilateur et a
la compilation
fichtre ! ça tombe bien mon HSM est tombé en panne, c'est
quelle page du bouquin le générateur de (vrais, hein) nombres
premiers de 4096 bits?
Même ça, c'est possible. Mais évidemment, le temps de
compilation risque d'être un peu long.
(mais tu peux aussi ecrire un programme qui ne s'arrete
jamais de compiler).
ben passionant alors ! presque autant qu'un include circulaire
mais avec des mots à la mode; on est pas rendu !...
En fait, pour faire une boucle, il faut utiliser la récursion.
Et ça m'étonnerait que le compilateur fasse une optimisation de
la récursion finale en ce cas-là. Ce qui veut dire qu'en fait,
on ne boucle pas beaucoup avant que le compilateur dit « out of
memory », ou quelque chose du genre.
Mais en tant que jouet, c'est ultra amusant.
(En fait, il y a certaines techniques de la méta-programmation
qui peuvent servir dans du code réel. Mais il ne faut vraiment
pas pousser, quitte à faire du code « write only », qui met des
heures à compiler.)
--
James Kanze GABI Software
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
[...] Mais je me demande comment les templates s'inscrivent dans le processus d'abstraction du langage et notamment dans le processus d'héritage [...]
je me demandais un peu aussi, et attendais goulument les réponses.
Il n'y a pas qu'Andrei qui a traité le problème -- Dave Abraham aussi (mais je ne l'ai pas encore lu), et il y a plus longtemps, Barton et Nackmann (que je conseillerais fortement, même aujourd'hui).
[...] donc tu peux theoriquement tout faire avec.
assurement, mais _pratiquement_ ?
Ça dépend du compilateur -- s'il est conforme, tu *peux* tout faire avec. Si on le doit, en revanche, et bien une autre question, qu'a très bien posé Gabriel. On peut dire que le méta-langage des templates, c'est aussi lisible que l'APL, et aussi succinct que le Cobol.
generer une liste de nombre premier par le compilateur et a la compilation
fichtre ! ça tombe bien mon HSM est tombé en panne, c'est quelle page du bouquin le générateur de (vrais, hein) nombres premiers de 4096 bits?
Même ça, c'est possible. Mais évidemment, le temps de compilation risque d'être un peu long.
(mais tu peux aussi ecrire un programme qui ne s'arrete jamais de compiler).
ben passionant alors ! presque autant qu'un include circulaire mais avec des mots à la mode; on est pas rendu !...
En fait, pour faire une boucle, il faut utiliser la récursion. Et ça m'étonnerait que le compilateur fasse une optimisation de la récursion finale en ce cas-là. Ce qui veut dire qu'en fait, on ne boucle pas beaucoup avant que le compilateur dit « out of memory », ou quelque chose du genre.
Mais en tant que jouet, c'est ultra amusant.
(En fait, il y a certaines techniques de la méta-programmation qui peuvent servir dans du code réel. Mais il ne faut vraiment pas pousser, quitte à faire du code « write only », qui met des heures à compiler.)
-- James Kanze GABI Software 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
Gabriel Dos Reis
(Fabien CHÊNE) writes:
| Fabien LE LEZ writes: | | >>Mais les avis divergent, beauté | >>artistique selon l'un, usine à gaz ou complexe pétro-chimique selon | >>les autres. | > | > La beauté d'un code réside dans sa simplicité. | | C'est subjectif -- Mais tu as le droit de préférer les filles sans | maquillage :-)
| Fabien LE LEZ <gramster@gramster.com> writes:
|
| >>Mais les avis divergent, beauté
| >>artistique selon l'un, usine à gaz ou complexe pétro-chimique selon
| >>les autres.
| >
| > La beauté d'un code réside dans sa simplicité.
|
| C'est subjectif -- Mais tu as le droit de préférer les filles sans
| maquillage :-)
| Fabien LE LEZ writes: | | >>Mais les avis divergent, beauté | >>artistique selon l'un, usine à gaz ou complexe pétro-chimique selon | >>les autres. | > | > La beauté d'un code réside dans sa simplicité. | | C'est subjectif -- Mais tu as le droit de préférer les filles sans | maquillage :-)
?
-- Gaby
Gabriel Dos Reis
(Fabien CHÊNE) writes:
| Gabriel Dos Reis writes: | | > (Fabien CHÊNE) writes: | > | > | Gabriel Dos Reis writes: | > | | > | > | En fait, le langage template du C++ est turing complete, donc tu peux | > | > | theoriquement tout faire avec. | > | > | > | > Une question est si cela est souhaitable dans un programme non-jouet. | > | | > | Des techniques de méta-programmation (genre manipulation tordue de | > | mpl::list pour générer des variants), | > | > si je dois écrire aujourd'hui du code à moyenne ou longue durée de | > vie, la dernière chose dont j'ai envie c'est que le maintainer soit | > « clever » pour le comprendre. | > [Note que le maintainer peut être moi-même, deux ans après :-(] | | Allez, je te relance :-) : considères-tu qu'il faudra être « clever » | pour émuler la méta-programmation à l'aide de concepts C++0X et de | surcharges ?
| Gabriel Dos Reis <gdr@integrable-solutions.net> writes:
|
| > fabien.chene.nospam@invalid.laposte.net (Fabien CHÊNE) writes:
| >
| > | Gabriel Dos Reis <gdr@integrable-solutions.net> writes:
| > |
| > | > | En fait, le langage template du C++ est turing complete, donc tu peux
| > | > | theoriquement tout faire avec.
| > | >
| > | > Une question est si cela est souhaitable dans un programme non-jouet.
| > |
| > | Des techniques de méta-programmation (genre manipulation tordue de
| > | mpl::list pour générer des variants),
| >
| > si je dois écrire aujourd'hui du code à moyenne ou longue durée de
| > vie, la dernière chose dont j'ai envie c'est que le maintainer soit
| > « clever » pour le comprendre.
| > [Note que le maintainer peut être moi-même, deux ans après :-(]
|
| Allez, je te relance :-) : considères-tu qu'il faudra être « clever »
| pour émuler la méta-programmation à l'aide de concepts C++0X et de
| surcharges ?
| Gabriel Dos Reis writes: | | > (Fabien CHÊNE) writes: | > | > | Gabriel Dos Reis writes: | > | | > | > | En fait, le langage template du C++ est turing complete, donc tu peux | > | > | theoriquement tout faire avec. | > | > | > | > Une question est si cela est souhaitable dans un programme non-jouet. | > | | > | Des techniques de méta-programmation (genre manipulation tordue de | > | mpl::list pour générer des variants), | > | > si je dois écrire aujourd'hui du code à moyenne ou longue durée de | > vie, la dernière chose dont j'ai envie c'est que le maintainer soit | > « clever » pour le comprendre. | > [Note que le maintainer peut être moi-même, deux ans après :-(] | | Allez, je te relance :-) : considères-tu qu'il faudra être « clever » | pour émuler la méta-programmation à l'aide de concepts C++0X et de | surcharges ?