 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Thierry Guest
|
Posted: Wed Jun 23, 2004 10:05 am Post subject: Re: Tout mettre dans le class.h ? |
|
|
Bonjour,
Il est d'usage de separer declaration et implementation comme on le faisait
en C (.h et .c) pour des raisons fonctionnelles (modules, librairies) et
esthétiques.
Cependant il y avait un bug dans les versions precedentes de VC obligeant
les class "template" a être declarées et implementées dans le même fichier
..h. D'où peut-etre les claas que tu as vu.
Xpost+fu2 fclc++
Nicolas ROBERT a écrit :
| Quote: | Bonjour,
J'ai remarqué que certains programmeurs, lorsqu'ils créaient une
classe en C++, déclaraient tout dans leur fichier class.h.
ex:
class.h:
class MaClass{
public:
//constructeur
MaClass();
//methode lambda
int methode();
....
};
MaClass:MaClass(){
....
}
int MaClass::methode(){
...
}
//****************
Ceci, au lieu de déclarer la class dans le fichier class.h et
d'alimenter les méthodes dans le fichier class.cpp.
Si j'y vois un avantage certains, à savoir l'utilisation d'un seul
fichier pour tout décrire, en revanche, ma faible expérience en C++ ne
me permet pas d'en voir
les inconvénients.
Est-ce possible de faire cela ou doit-on respecter rigoureusement le
contenu d'un fichier .h ?
|
--
« Always look at the bright side of the life... »
|
|
| Back to top |
|
 |
Arnaud Debaene Guest
|
Posted: Wed Jun 23, 2004 9:01 pm Post subject: Re: Tout mettre dans le class.h ? |
|
|
Thierry wrote:
| Quote: | Cependant il y avait un bug dans les versions precedentes de VC
obligeant les class "template" a être declarées et implementées dans
le même fichier .h.
|
C'est toujours le cas actuellement, et ce n'est pas un 'bug" mais une
fonctionnalité non implémentée : le mot clé "export". A ma connaissance, un
seul compilateur l'implémente aujourd'hui : Comeau.
Arnaud
|
|
| Back to top |
|
 |
Nomak Guest
|
Posted: Thu Jun 24, 2004 10:32 am Post subject: Re: Tout mettre dans le class.h ? |
|
|
Le 23/06/2004 à 23:01:36, Arnaud Debaene <adebaene (AT) club-internet (DOT) fr> a
écrit:
| Quote: | Cependant il y avait un bug dans les versions precedentes de VC
obligeant les class "template" a être declarées et implementées dans
le même fichier .h.
C'est toujours le cas actuellement, et ce n'est pas un 'bug" mais une
fonctionnalité non implémentée : le mot clé "export". A ma connaissance, un
seul compilateur l'implémente aujourd'hui : Comeau.
|
Obliger à mettre l'implémentation et la déclaration dans le même
fichier .h c'est un bug.
Obliger à avoir l'implémentation (.hxx) avec la déclaration (.hh) pour
chaque unité de compilation (.cc), ça c'est ne pas gérer "export".
--
Nomak
|
|
| Back to top |
|
 |
Arnaud Debaene Guest
|
Posted: Thu Jun 24, 2004 3:10 pm Post subject: Re: Tout mettre dans le class.h ? |
|
|
Nomak <no.email (AT) invalid (DOT) domain.fr> wrote
| Quote: | Obliger à mettre l'implémentation et la déclaration dans le même
fichier .h c'est un bug.
Obliger à avoir l'implémentation (.hxx) avec la déclaration (.hh) pour
chaque unité de compilation (.cc), ça c'est ne pas gérer "export".
|
Heuuu... j'ai rien compris là Tu pourrais préciser un peu ce que
tu veux dire exactement?
Tu parles de la solution où l'implémenation de la classe template est
dans un point .inl (ou.hxx où ce que tu veux) qui est #inclus à la fin
du header de la classe template, c'est cà?
Arnaud
|
|
| Back to top |
|
 |
Nomak Guest
|
Posted: Thu Jun 24, 2004 3:36 pm Post subject: Re: Tout mettre dans le class.h ? |
|
|
Le 24/06/2004 à 17:10:50, Arnaud Debaene <adebaene (AT) club-internet (DOT) fr> a
écrit:
| Quote: | Nomak <no.email (AT) invalid (DOT) domain.fr> wrote
Obliger à mettre l'implémentation et la déclaration dans le même
fichier .h c'est un bug.
Obliger à avoir l'implémentation (.hxx) avec la déclaration (.hh) pour
chaque unité de compilation (.cc), ça c'est ne pas gérer "export".
Heuuu... j'ai rien compris là Tu pourrais préciser un peu ce que
tu veux dire exactement?
Tu parles de la solution où l'implémenation de la classe template est
dans un point .inl (ou.hxx où ce que tu veux) qui est #inclus à la fin
du header de la classe template, c'est cà?
|
oui
quand tu lance la compilation sur un fichier (ex: main.cc), la sortie
du préprocesseur de main.cc doit avoir toutes les implémentations des
"template"s déclarés (et utilisés?). Cette restriction vient du
"non-support" de export.
Mais c'est pas forcément dans le même fichier physique, sinon c'est un
bug.
--
Nomak
|
|
| Back to top |
|
 |
Arnaud Debaene Guest
|
Posted: Thu Jun 24, 2004 5:15 pm Post subject: Re: Tout mettre dans le class.h ? |
|
|
Nomak wrote:
| Quote: | Le 24/06/2004 à 17:10:50, Arnaud Debaene <adebaene (AT) club-internet (DOT) fr> a
écrit:
Nomak <no.email (AT) invalid (DOT) domain.fr> wrote in message
news:<6pd0qudvts44.a4yjb7e2y15b.dlg (AT) 40tude (DOT) net>...
Obliger à mettre l'implémentation et la déclaration dans le même
fichier .h c'est un bug.
Obliger à avoir l'implémentation (.hxx) avec la déclaration (.hh)
pour
chaque unité de compilation (.cc), ça c'est ne pas gérer "export".
Heuuu... j'ai rien compris là Tu pourrais préciser un peu ce que
tu veux dire exactement?
Tu parles de la solution où l'implémenation de la classe template est
dans un point .inl (ou.hxx où ce que tu veux) qui est #inclus à la
fin
du header de la classe template, c'est cà?
oui
quand tu lance la compilation sur un fichier (ex: main.cc), la sortie
du préprocesseur de main.cc doit avoir toutes les implémentations des
"template"s déclarés (et utilisés?). Cette restriction vient du
"non-support" de export.
Mais c'est pas forcément dans le même fichier physique, sinon c'est un
bug.
|
On est bien d'accord, mais VC support depuis belle lurette le mécanisme
d'#inclure l'implémentation à la fin d'un header (je pense qu'il l'a
toujours supporté d'ailleurs), donc je ne vois pas trop où tu veux en venir.
Arnaud
|
|
| Back to top |
|
 |
Nomak Guest
|
Posted: Thu Jun 24, 2004 6:04 pm Post subject: Re: Tout mettre dans le class.h ? |
|
|
Le 24/06/2004 à 19:15:16, Arnaud Debaene <adebaene (AT) club-internet (DOT) fr> a
écrit:
| Quote: | On est bien d'accord, mais VC support depuis belle lurette le mécanisme
d'#inclure l'implémentation à la fin d'un header (je pense qu'il l'a
toujours supporté d'ailleurs), donc je ne vois pas trop où tu veux en venir.
|
Rappel:
| Quote: | Cependant il y avait un bug dans les versions precedentes de VC
obligeant les class "template" a être declarées et implementées dans
le même fichier .h.
C'est toujours le cas actuellement, et ce n'est pas un 'bug" mais une
fonctionnalité non implémentée : le mot clé "export". A ma connaissance, un
seul compilateur l'implémente aujourd'hui : Comeau.
|
Si ce qu'a dit Thierry est vrai, c'est bien un bug, et ça n'a rien à
voir avec export.
--
Nomak
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|