Je souhaiterais avoir votre opinion.
Pour organiser mon code, pour une classe, je déclare la partie prototype
dans un .h, et la partie fonctionnelle dans un .cpp.
Par contre, avec des classes template, quelle solution serait bonne pour
vous ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Serge Paccalin
Le vendredi 16 octobre 2009 à 21:21:29, TSalm a écrit dans fr.comp.lang.c++ :
Pour organiser mon code, pour une classe, je déclare la partie prototype dans un .h, et la partie fonctionnelle dans un .cpp. Par contre, avec des classes template, quelle solution serait bonne pour vous ?
Pour le moment, je mets tout dans un .h, et je ne fais pas de .cpp, mais ça me plait moyen, comme on dit.
J'envisage une autre solution, mais je n'ai pas encore osé la mettre en pratique : faire un .h et un .cpp comme pour une classe ordinaire, mais rajouter un #include "le_template.cpp" dans le .h. Comme ça, l'utilisateur de la classe inclut le .h, comme si de rien n'était, et, le jour où on pourra compiler avec templates sans leur définition, il me suffirait d'enlever cet #include (ou le rendre conditionnel).
-- ___________ _/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net _L_) Il faut donc que les hommes commencent -'(__) par n'être pas fanatiques pour mériter _/___(_) la tolérance. -- Voltaire, 1763
Le vendredi 16 octobre 2009 à 21:21:29, TSalm a écrit dans
fr.comp.lang.c++ :
Pour organiser mon code, pour une classe, je déclare la partie prototype
dans un .h, et la partie fonctionnelle dans un .cpp.
Par contre, avec des classes template, quelle solution serait bonne pour
vous ?
Pour le moment, je mets tout dans un .h, et je ne fais pas de .cpp, mais
ça me plait moyen, comme on dit.
J'envisage une autre solution, mais je n'ai pas encore osé la mettre en
pratique : faire un .h et un .cpp comme pour une classe ordinaire, mais
rajouter un #include "le_template.cpp" dans le .h. Comme ça,
l'utilisateur de la classe inclut le .h, comme si de rien n'était, et,
le jour où on pourra compiler avec templates sans leur définition, il me
suffirait d'enlever cet #include (ou le rendre conditionnel).
--
___________
_/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net
_L_) Il faut donc que les hommes commencent
-'(__) par n'être pas fanatiques pour mériter
_/___(_) la tolérance. -- Voltaire, 1763
Le vendredi 16 octobre 2009 à 21:21:29, TSalm a écrit dans fr.comp.lang.c++ :
Pour organiser mon code, pour une classe, je déclare la partie prototype dans un .h, et la partie fonctionnelle dans un .cpp. Par contre, avec des classes template, quelle solution serait bonne pour vous ?
Pour le moment, je mets tout dans un .h, et je ne fais pas de .cpp, mais ça me plait moyen, comme on dit.
J'envisage une autre solution, mais je n'ai pas encore osé la mettre en pratique : faire un .h et un .cpp comme pour une classe ordinaire, mais rajouter un #include "le_template.cpp" dans le .h. Comme ça, l'utilisateur de la classe inclut le .h, comme si de rien n'était, et, le jour où on pourra compiler avec templates sans leur définition, il me suffirait d'enlever cet #include (ou le rendre conditionnel).
-- ___________ _/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net _L_) Il faut donc que les hommes commencent -'(__) par n'être pas fanatiques pour mériter _/___(_) la tolérance. -- Voltaire, 1763
Fabien LE LEZ
On Fri, 16 Oct 2009 23:21:05 +0200, Serge Paccalin :
J'envisage une autre solution, mais je n'ai pas encore osé la mettre en pratique : faire un .h et un .cpp comme pour une classe ordinaire, mais rajouter un #include "le_template.cpp" dans le .h.
Mauvaise idée. En revanche, tu peux utiliser une autre extension -- .hpp par exemple.
On Fri, 16 Oct 2009 23:21:05 +0200, Serge Paccalin :
J'envisage une autre solution, mais je n'ai pas encore osé la mettre en
pratique : faire un .h et un .cpp comme pour une classe ordinaire, mais
rajouter un #include "le_template.cpp" dans le .h.
Mauvaise idée. En revanche, tu peux utiliser une autre extension --
.hpp par exemple.
On Fri, 16 Oct 2009 23:21:05 +0200, Serge Paccalin :
J'envisage une autre solution, mais je n'ai pas encore osé la mettre en pratique : faire un .h et un .cpp comme pour une classe ordinaire, mais rajouter un #include "le_template.cpp" dans le .h.
Mauvaise idée. En revanche, tu peux utiliser une autre extension -- .hpp par exemple.
Fabien LE LEZ
On Fri, 16 Oct 2009 23:21:05 +0200, Serge Paccalin :
le jour où on pourra compiler avec templates sans leur définition, il me suffirait d'enlever cet #include
Pas vraiment. Il y a déjà une solution (export), mais tu dois modifier (légèrement) le code.
On Fri, 16 Oct 2009 23:21:05 +0200, Serge Paccalin
<sp@mailclub.no.spam.net.invalid>:
le jour où on pourra compiler avec templates sans leur définition, il me
suffirait d'enlever cet #include
Pas vraiment. Il y a déjà une solution (export), mais tu dois modifier
(légèrement) le code.
On Fri, 16 Oct 2009 23:21:05 +0200, Serge Paccalin :
le jour où on pourra compiler avec templates sans leur définition, il me suffirait d'enlever cet #include
Pas vraiment. Il y a déjà une solution (export), mais tu dois modifier (légèrement) le code.
Marc
Fabien LE LEZ wrote:
On Fri, 16 Oct 2009 23:21:05 +0200, Serge Paccalin :
le jour où on pourra compiler avec templates sans leur définition, il me suffirait d'enlever cet #include
Pas vraiment. Il y a déjà une solution (export), mais tu dois modifier (légèrement) le code.
Avec une ou deux macros...
Sinon, il y a aussi des compilateurs qui acceptent de compiler avec les .h sans définition et compilent automatiquement au besoin le .cc correspondant pour trouver la définition.
Fabien LE LEZ wrote:
On Fri, 16 Oct 2009 23:21:05 +0200, Serge Paccalin
<sp@mailclub.no.spam.net.invalid>:
le jour où on pourra compiler avec templates sans leur définition, il me
suffirait d'enlever cet #include
Pas vraiment. Il y a déjà une solution (export), mais tu dois modifier
(légèrement) le code.
Avec une ou deux macros...
Sinon, il y a aussi des compilateurs qui acceptent de compiler avec les
.h sans définition et compilent automatiquement au besoin le .cc
correspondant pour trouver la définition.
On Fri, 16 Oct 2009 23:21:05 +0200, Serge Paccalin :
le jour où on pourra compiler avec templates sans leur définition, il me suffirait d'enlever cet #include
Pas vraiment. Il y a déjà une solution (export), mais tu dois modifier (légèrement) le code.
Avec une ou deux macros...
Sinon, il y a aussi des compilateurs qui acceptent de compiler avec les .h sans définition et compilent automatiquement au besoin le .cc correspondant pour trouver la définition.
James Kanze
On Oct 16, 9:21 pm, TSalm wrote:
Je souhaiterais avoir votre opinion. Pour organiser mon code, pour une classe, je déclare la partie prototype dans un .h, et la partie fonctionnelle dans un .cpp. Par contre, avec des classes template, quelle solution serait bonne pour vous ?
La même:-).
Sériousement, j'utilise une autre extension (.tcc, à la place de .cc), afin qu'on n'essaie pas de les compiler par erreur, et j'ajoute un #include de ce fichier à la fin de l'en-tête. (Et évidemment, je l'exporte avec les en-têtes.)
Ce que je conseille (mais je ne le fais pas encore moi-même), c'est de déclarer les templates export, puis de definir "export" comme chaîne vide dans le préprocesseur (-Dexport= ou /Dexport= à la ligne de commande), et faire l'inclusion dépendant de cette définition, et de fournir en plus des fichiers xxx.cc qui contient: #include "xxx.hh" #include "xxx.tcc" pour que tout soit prêt pour le jour où tu aurais un compilateur C++, plutôt qu'un à peu près.
-- James Kanze
On Oct 16, 9:21 pm, TSalm <ts...@free.fr> wrote:
Je souhaiterais avoir votre opinion.
Pour organiser mon code, pour une classe, je déclare la partie
prototype dans un .h, et la partie fonctionnelle dans un .cpp.
Par contre, avec des classes template, quelle solution serait
bonne pour vous ?
La même:-).
Sériousement, j'utilise une autre extension (.tcc, à la place de
.cc), afin qu'on n'essaie pas de les compiler par erreur, et
j'ajoute un #include de ce fichier à la fin de l'en-tête. (Et
évidemment, je l'exporte avec les en-têtes.)
Ce que je conseille (mais je ne le fais pas encore moi-même),
c'est de déclarer les templates export, puis de definir "export"
comme chaîne vide dans le préprocesseur (-Dexport= ou /Dexport=
à la ligne de commande), et faire l'inclusion dépendant de cette
définition, et de fournir en plus des fichiers xxx.cc qui
contient:
#include "xxx.hh"
#include "xxx.tcc"
pour que tout soit prêt pour le jour où tu aurais un compilateur
C++, plutôt qu'un à peu près.
Je souhaiterais avoir votre opinion. Pour organiser mon code, pour une classe, je déclare la partie prototype dans un .h, et la partie fonctionnelle dans un .cpp. Par contre, avec des classes template, quelle solution serait bonne pour vous ?
La même:-).
Sériousement, j'utilise une autre extension (.tcc, à la place de .cc), afin qu'on n'essaie pas de les compiler par erreur, et j'ajoute un #include de ce fichier à la fin de l'en-tête. (Et évidemment, je l'exporte avec les en-têtes.)
Ce que je conseille (mais je ne le fais pas encore moi-même), c'est de déclarer les templates export, puis de definir "export" comme chaîne vide dans le préprocesseur (-Dexport= ou /Dexport= à la ligne de commande), et faire l'inclusion dépendant de cette définition, et de fournir en plus des fichiers xxx.cc qui contient: #include "xxx.hh" #include "xxx.tcc" pour que tout soit prêt pour le jour où tu aurais un compilateur C++, plutôt qu'un à peu près.
-- James Kanze
TSalm
Le Sat, 17 Oct 2009 01:32:12 +0200, Fabien LE LEZ a écrit:
On Fri, 16 Oct 2009 23:21:05 +0200, Serge Paccalin :
le jour où on pourra compiler avec templates sans leur définition, il me suffirait d'enlever cet #include
Pas vraiment. Il y a déjà une solution (export), mais tu dois modifier (légèrement) le code.
Merci pour vos réponse. Et est-ce qu'utiliser "export" dégrade les performances ?
Le Sat, 17 Oct 2009 01:32:12 +0200, Fabien LE LEZ <gramster@gramster.com>
a écrit:
On Fri, 16 Oct 2009 23:21:05 +0200, Serge Paccalin
<sp@mailclub.no.spam.net.invalid>:
le jour où on pourra compiler avec templates sans leur définition, il me
suffirait d'enlever cet #include
Pas vraiment. Il y a déjà une solution (export), mais tu dois modifier
(légèrement) le code.
Merci pour vos réponse.
Et est-ce qu'utiliser "export" dégrade les performances ?
Le Sat, 17 Oct 2009 01:32:12 +0200, Fabien LE LEZ a écrit:
On Fri, 16 Oct 2009 23:21:05 +0200, Serge Paccalin :
le jour où on pourra compiler avec templates sans leur définition, il me suffirait d'enlever cet #include
Pas vraiment. Il y a déjà une solution (export), mais tu dois modifier (légèrement) le code.
Merci pour vos réponse. Et est-ce qu'utiliser "export" dégrade les performances ?
TSalm
Le Sat, 17 Oct 2009 01:30:46 +0200, Fabien LE LEZ a écrit:
On Fri, 16 Oct 2009 23:21:05 +0200, Serge Paccalin :
J'envisage une autre solution, mais je n'ai pas encore osé la mettre en pratique : faire un .h et un .cpp comme pour une classe ordinaire, mais rajouter un #include "le_template.cpp" dans le .h.
Mauvaise idée. En revanche, tu peux utiliser une autre extension -- .hpp par exemple.
Le problème avec l'inclusion du ".cpp" est qu'il ne doit pas être déclaré dans les fichiers à compiler, ce qui, j'imagine, pourrait aussi vite compliquer les choses, parce qu'il faudrait distinguer les ".cpp" de classes templates des non-templates.
D'un autre côté, utiliser un ".hpp" ne permet pas cette séparation entre prototype et fonctionnelle qui, je trouves, apporte une meilleur lisibilité.
Le Sat, 17 Oct 2009 01:30:46 +0200, Fabien LE LEZ <gramster@gramster.com>
a écrit:
On Fri, 16 Oct 2009 23:21:05 +0200, Serge Paccalin :
J'envisage une autre solution, mais je n'ai pas encore osé la mettre en
pratique : faire un .h et un .cpp comme pour une classe ordinaire, mais
rajouter un #include "le_template.cpp" dans le .h.
Mauvaise idée. En revanche, tu peux utiliser une autre extension --
.hpp par exemple.
Le problème avec l'inclusion du ".cpp" est qu'il ne doit pas être déclaré
dans les fichiers à compiler, ce qui, j'imagine, pourrait aussi vite
compliquer les choses, parce qu'il faudrait distinguer les ".cpp" de
classes templates des non-templates.
D'un autre côté, utiliser un ".hpp" ne permet pas cette séparation entre
prototype et fonctionnelle qui, je trouves, apporte une meilleur
lisibilité.
Le Sat, 17 Oct 2009 01:30:46 +0200, Fabien LE LEZ a écrit:
On Fri, 16 Oct 2009 23:21:05 +0200, Serge Paccalin :
J'envisage une autre solution, mais je n'ai pas encore osé la mettre en pratique : faire un .h et un .cpp comme pour une classe ordinaire, mais rajouter un #include "le_template.cpp" dans le .h.
Mauvaise idée. En revanche, tu peux utiliser une autre extension -- .hpp par exemple.
Le problème avec l'inclusion du ".cpp" est qu'il ne doit pas être déclaré dans les fichiers à compiler, ce qui, j'imagine, pourrait aussi vite compliquer les choses, parce qu'il faudrait distinguer les ".cpp" de classes templates des non-templates.
D'un autre côté, utiliser un ".hpp" ne permet pas cette séparation entre prototype et fonctionnelle qui, je trouves, apporte une meilleur lisibilité.
Serge Paccalin
Le samedi 17 octobre 2009 à 01:30:46, Fabien LE LEZ a écrit dans fr.comp.lang.c++ :
J'envisage une autre solution, mais je n'ai pas encore osé la mettre en pratique : faire un .h et un .cpp comme pour une classe ordinaire, mais rajouter un #include "le_template.cpp" dans le .h.
Mauvaise idée. En revanche, tu peux utiliser une autre extension -- .hpp par exemple.
Si ce n'est qu'une question d'extension, l'idée n'est pas si mauvaise. Cf. la réponse de James.
-- ___________ _/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net _L_) Il faut donc que les hommes commencent -'(__) par n'être pas fanatiques pour mériter _/___(_) la tolérance. -- Voltaire, 1763
Le samedi 17 octobre 2009 à 01:30:46, Fabien LE LEZ a écrit dans
fr.comp.lang.c++ :
J'envisage une autre solution, mais je n'ai pas encore osé la mettre en
pratique : faire un .h et un .cpp comme pour une classe ordinaire, mais
rajouter un #include "le_template.cpp" dans le .h.
Mauvaise idée. En revanche, tu peux utiliser une autre extension --
.hpp par exemple.
Si ce n'est qu'une question d'extension, l'idée n'est pas si mauvaise.
Cf. la réponse de James.
--
___________
_/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net
_L_) Il faut donc que les hommes commencent
-'(__) par n'être pas fanatiques pour mériter
_/___(_) la tolérance. -- Voltaire, 1763
Le samedi 17 octobre 2009 à 01:30:46, Fabien LE LEZ a écrit dans fr.comp.lang.c++ :
J'envisage une autre solution, mais je n'ai pas encore osé la mettre en pratique : faire un .h et un .cpp comme pour une classe ordinaire, mais rajouter un #include "le_template.cpp" dans le .h.
Mauvaise idée. En revanche, tu peux utiliser une autre extension -- .hpp par exemple.
Si ce n'est qu'une question d'extension, l'idée n'est pas si mauvaise. Cf. la réponse de James.
-- ___________ _/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net _L_) Il faut donc que les hommes commencent -'(__) par n'être pas fanatiques pour mériter _/___(_) la tolérance. -- Voltaire, 1763
James Kanze
On Oct 17, 11:43 am, TSalm wrote:
Le Sat, 17 Oct 2009 01:32:12 +0200, Fabien LE LEZ a écrit:
> On Fri, 16 Oct 2009 23:21:05 +0200, Serge Paccalin > :
>> le jour où on pourra compiler avec templates sans leur >> définition, il me suffirait d'enlever cet #include
> Pas vraiment. Il y a déjà une solution (export), mais tu > dois modifier (légèrement) le code.
Merci pour vos réponse. Et est-ce qu'utiliser "export" dégrade les performances ?
Les questions de performances dépendent toujours de l'implémentation. Dans ce cas-ci, c'est difficile de donner même une indication générale, puisque la plupart des compilateurs ne supportent pas export (même s'il fait partie integrale du langage). Mais a priori, ça ne doit pas faire une différence.
-- James Kanze
On Oct 17, 11:43 am, TSalm <ts...@free.fr> wrote:
Le Sat, 17 Oct 2009 01:32:12 +0200, Fabien LE LEZ <grams...@gramster.com>
a écrit:
> On Fri, 16 Oct 2009 23:21:05 +0200, Serge Paccalin
> <s...@mailclub.no.spam.net.invalid>:
>> le jour où on pourra compiler avec templates sans leur
>> définition, il me suffirait d'enlever cet #include
> Pas vraiment. Il y a déjà une solution (export), mais tu
> dois modifier (légèrement) le code.
Merci pour vos réponse.
Et est-ce qu'utiliser "export" dégrade les performances ?
Les questions de performances dépendent toujours de
l'implémentation. Dans ce cas-ci, c'est difficile de donner même
une indication générale, puisque la plupart des compilateurs ne
supportent pas export (même s'il fait partie integrale du
langage). Mais a priori, ça ne doit pas faire une différence.
Le Sat, 17 Oct 2009 01:32:12 +0200, Fabien LE LEZ a écrit:
> On Fri, 16 Oct 2009 23:21:05 +0200, Serge Paccalin > :
>> le jour où on pourra compiler avec templates sans leur >> définition, il me suffirait d'enlever cet #include
> Pas vraiment. Il y a déjà une solution (export), mais tu > dois modifier (légèrement) le code.
Merci pour vos réponse. Et est-ce qu'utiliser "export" dégrade les performances ?
Les questions de performances dépendent toujours de l'implémentation. Dans ce cas-ci, c'est difficile de donner même une indication générale, puisque la plupart des compilateurs ne supportent pas export (même s'il fait partie integrale du langage). Mais a priori, ça ne doit pas faire une différence.
-- James Kanze
TSalm
>> >> le jour où on pourra compiler avec templates sans leur >> définition, il me suffirait d'enlever cet #include
> Pas vraiment. Il y a déjà une solution (export), mais tu > dois modifier (légèrement) le code.
Merci pour vos réponse. Et est-ce qu'utiliser "export" dégrade les performances ?
Les questions de performances dépendent toujours de l'implémentation. Dans ce cas-ci, c'est difficile de donner même une indication générale, puisque la plupart des compilateurs ne supportent pas export (même s'il fait partie integrale du langage). Mais a priori, ça ne doit pas faire une différence.
Merci. Apparement, le mien (MinGW) ne le supporte hélas pas :-( Je garde donc le choix d'écrire la partie fonctionnelle dans un fichier avec une extension spéciale, et d'inclure ce fichier dans le .h.
Merci pour vos excellentes réponses.
>> >> le jour où on pourra compiler avec templates sans leur
>> définition, il me suffirait d'enlever cet #include
> Pas vraiment. Il y a déjà une solution (export), mais tu
> dois modifier (légèrement) le code.
Merci pour vos réponse.
Et est-ce qu'utiliser "export" dégrade les performances ?
Les questions de performances dépendent toujours de
l'implémentation. Dans ce cas-ci, c'est difficile de donner même
une indication générale, puisque la plupart des compilateurs ne
supportent pas export (même s'il fait partie integrale du
langage). Mais a priori, ça ne doit pas faire une différence.
Merci.
Apparement, le mien (MinGW) ne le supporte hélas pas :-(
Je garde donc le choix d'écrire la partie fonctionnelle dans un fichier
avec une extension spéciale, et d'inclure ce fichier dans le .h.
>> >> le jour où on pourra compiler avec templates sans leur >> définition, il me suffirait d'enlever cet #include
> Pas vraiment. Il y a déjà une solution (export), mais tu > dois modifier (légèrement) le code.
Merci pour vos réponse. Et est-ce qu'utiliser "export" dégrade les performances ?
Les questions de performances dépendent toujours de l'implémentation. Dans ce cas-ci, c'est difficile de donner même une indication générale, puisque la plupart des compilateurs ne supportent pas export (même s'il fait partie integrale du langage). Mais a priori, ça ne doit pas faire une différence.
Merci. Apparement, le mien (MinGW) ne le supporte hélas pas :-( Je garde donc le choix d'écrire la partie fonctionnelle dans un fichier avec une extension spéciale, et d'inclure ce fichier dans le .h.