Organisation des sources et class template

Le
TSalm
Bonjour,

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 ?


D'avance merci,
TSalm
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Serge Paccalin
Le #20364681
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
Le #20365031
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
Le #20365021
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
Le #20366441
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.
James Kanze
Le #20366521
On Oct 16, 9:21 pm, TSalm
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 #20366511
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 #20366501
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 #20367261
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
Le #20371301
On Oct 17, 11:43 am, 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 ?



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 #20372181
>> >> 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.
Publicité
Poster une réponse
Anonyme