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

Organisation des sources et class template

10 réponses
Avatar
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

10 réponses

Avatar
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
Avatar
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.
Avatar
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.
Avatar
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.
Avatar
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
Avatar
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 ?
Avatar
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é.
Avatar
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
Avatar
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
Avatar
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.