Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1745 connectés 

  FORUM HardWare.fr
  Programmation

  [C++] question sur les templates

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] question sur les templates

n°77559
ayachi
Posté le 03-12-2001 à 04:00:57  profilanswer
 

y'a t-il moyen d'écrire des templates avec la déclaration dans un header et l'implémentation dans un .cpp ?
 
Par exemple
dans le .h
template<typename T> class test
{ public :
  T get( );
private:  
  T valeur;
}
 
dans le .cpp
template<typename T> T test<T>::get( )
{
   return T;
}
 
dans le main.cpp
#include "test.h"
void main( )
{
   test<int> x;
 
   int i = x.get( );
}
 
normalement le linker dit que le qu'il ne trouve pas
int test<int>::get( ), normal car le compilo ne compile
du code basé sur template que si on l'utilise.
Comment faire pour l'obliger à compiler le test.cpp pour int ?

mood
Publicité
Posté le 03-12-2001 à 04:00:57  profilanswer
 

n°77563
wpk
Posté le 03-12-2001 à 08:38:21  profilanswer
 

ayachi a écrit a écrit :

y'a t-il moyen d'écrire des templates avec la déclaration dans un header et l'implémentation dans un .cpp ?
 
Par exemple
dans le .h
template<typename T> class test
{ public :
  T get( );
private:  
  T valeur;
}
 
dans le .cpp
template<typename T> T test<T>::get( )
{
   return T;
}

 
dans le main.cpp
#include "test.h"
void main( )
{
   test<int> x;
 
   int i = x.get( );
}
 
normalement le linker dit que le qu'il ne trouve pas
int test<int>::get( ), normal car le compilo ne compile
du code basé sur template que si on l'utilise.
Comment faire pour l'obliger à compiler le test.cpp pour int ?  




 
reponse : non supprime le code du cpp pour le template et met le à la suite de la declaration ds le .h ...
 
à la limite tu peux faire ds le .h un include du cpp du template

 

[edtdd]--Message édité par wpk--[/edtdd]

n°77564
SoWhatIn22
Posté le 03-12-2001 à 08:44:25  profilanswer
 

hello,
 
tu peux tout à fait laisser ton code dans le fichier .cpp.
Mais à ce moment là, après la déclaration de la classe, il faut que tu fasses un #include "monfichier.cpp"
c'est ce que je fais, et cela fonctionne très bien (comme le dit wpk aussi).
 
Il faut forcément que le code soit rattaché au header. C'est comme ça, et je n'ai pas envie de me lancer dans des grandes explication tôt le matin ;)
 
a+

n°77574
BENB
100% Lux.
Posté le 03-12-2001 à 09:51:46  profilanswer
 

Mis a part si ton compilo est un tromblon, c'est effectivement comme ca qu'il faut faire...

n°77809
ayachi
Posté le 03-12-2001 à 23:21:56  profilanswer
 

ok donc pas de directive pour dire compile moi ce template pour le type int.
 
Merci bien

n°77920
BENB
100% Lux.
Posté le 04-12-2001 à 10:48:10  profilanswer
 

ayachi a écrit a écrit :

ok donc pas de directive pour dire compile moi ce template pour le type int.
 
Merci bien  




Si tu veux tu peux faire une instanciation explicite:
class test<int>;
ou mieux
typedef test<int> testint;

n°77930
El_gringo
Posté le 04-12-2001 à 10:57:25  profilanswer
 

BENB a écrit a écrit :

 
Si tu veux tu peux faire une instanciation explicite:
class test<int>;
ou mieux
typedef test<int> testint;  




 
pourquoi "mieux" !? vu que c la même chose...

n°77936
BENB
100% Lux.
Posté le 04-12-2001 à 11:03:44  profilanswer
 

El_Gringo a écrit a écrit :

 
 
pourquoi "mieux" !? vu que c la même chose...  




C'est pas la meme chose ca defini un synonyme plus facile a utiliser...

n°77937
El_gringo
Posté le 04-12-2001 à 11:05:04  profilanswer
 

hummmm... ok ! désolé...

n°77939
BENB
100% Lux.
Posté le 04-12-2001 à 11:06:46  profilanswer
 

El_Gringo a écrit a écrit :

hummmm... ok ! désolé...  




C'est pas grave...
Mais avoir le dernier mot face a moi...
Tu aurras du mal :D (j'ai des predispositions naturelles ;) )

mood
Publicité
Posté le 04-12-2001 à 11:06:46  profilanswer
 

n°77942
El_gringo
Posté le 04-12-2001 à 11:08:37  profilanswer
 

BENB a écrit a écrit :

 
C'est pas grave...
Mais avoir le dernier mot face a moi...
Tu aurras du mal :D (j'ai des predispositions naturelles ;) )  




 
sur la STL, j'en doute pas !
Mais sur les MFC, j'te prend quand tu veux :D

n°77943
BENB
100% Lux.
Posté le 04-12-2001 à 11:11:19  profilanswer
 

El_Gringo a écrit a écrit :

 
 
sur la STL, j'en doute pas !
Mais sur les MFC, j'te prend quand tu veux :D  




Les MFC c'est quoi ca ?
Tu parles de cet infame embrouillamini qui copie palement wxWindows ? (j'y vais peut-etre un peu fort la :D )
Honnetement jette un coup d'oeil a wxWindows, et les MFC te paraitrons bien fades...
 
Et puis arrete de me dire comme ca que tu es prets a me prendre ca pourrait faire jazzer :sarcastic:  
De plus je suis mariee, et si tu veux je te presente mon mari...
Il a ete pillier de rugby :D

 

[edtdd]--Message édité par BENB--[/edtdd]

n°77946
El_gringo
Posté le 04-12-2001 à 11:15:17  profilanswer
 

tu critiques, tu critiques, ms je suis sur que t'as presque jammais essayé... que des a prioris anti-billesques (puisque t'as inventé l'adjectif, autant s'en servir, c vrai qu'il est pratique :D)

n°77949
BENB
100% Lux.
Posté le 04-12-2001 à 11:17:48  profilanswer
 

Il y a lontemps, mais juste des CArray, et pas trop...
 
Par contre des que j'ai le temps je me plonge dans wxWindows qui me parait bcp mieux, ne serait-ce que par le cote portabilite...
 
Et franchement, je crois que tu peux imaginer des MFC ou les classes commencent par wx au lieu de C :D

n°77952
El_gringo
Posté le 04-12-2001 à 11:21:13  profilanswer
 

t'aimes ça la portabilité toi... moi je t'ai déja dis, je m'en tape. Donc, je connais les MFC, ça marche très bien ! je vais pas chercher plus loin...
Sinon, disons que je te prend pas alors... enfin, moi j'disais ça comme ça ! tu dis pas à ton mari hein !? :D

n°77954
El_gringo
Posté le 04-12-2001 à 11:21:57  profilanswer
 

et puis, je pensais pas qu'y serai jaloux si tu vas programmer avec quelqu'un d'autre... l'adultère informatique, y a plus grave...

n°77955
BENB
100% Lux.
Posté le 04-12-2001 à 11:23:31  profilanswer
 

El_Gringo a écrit a écrit :

et puis, je pensais pas qu'y serai jaloux si tu vas programmer avec quelqu'un d'autre... l'adultère informatique, y a plus grave...  




Lui il serait plutot refractaire a l'informatique...
enfin sauf quand je lui sort ces courbes de perfs de ses pompes :D

n°77957
El_gringo
Posté le 04-12-2001 à 11:26:15  profilanswer
 

Comme t'en parle, il à l'aire dans le genre "brute épaisse", je m'demande si je suis pas en danger en m'adressant directement à toi ici...
En fait, je serai incapable de te donner un age... enfin, d'après ta maturité C++esque, je dirais... au moins 35 non !?:D

 

[edtdd]--Message édité par El_Gringo--[/edtdd]

n°77958
chrisbk
-
Posté le 04-12-2001 à 11:26:24  profilanswer
 

Zetes mauvais, l'API Win32 brute, c ca le mieux [:nofret]

n°77959
El_gringo
Posté le 04-12-2001 à 11:30:04  profilanswer
 

Par contre, j'avoue, là je jette un oeil à wxWindows, ça à l'aire carrément plus complet que les MFC's  :jap:  
Saloperie de Microsoft, c à cause d'eux que je connais que les MFC...

n°77961
chrisbk
-
Posté le 04-12-2001 à 11:31:22  profilanswer
 

El_Gringo a écrit a écrit :

Par contre, j'avoue, là je jette un oeil à wxWindows, ça à l'aire carrément plus complet que les MFC's  :jap:  
Saloperie de Microsoft, c à cause d'eux que je connais que les MFC...  




 
pourquoi ils sont fait quoi encore ? ils ont pirate ton IE pour qu'il plante sur les site de wxWindows ? :D

n°77962
BENB
100% Lux.
Posté le 04-12-2001 à 11:33:50  profilanswer
 

El_Gringo a écrit a écrit :

Comme t'en parle, il à l'aire dans le genre "brute épaisse", je m'demande si je suis pas en danger en m'adressant directement à toi ici...
En fait, je serai incapable de te donner un age... enfin, d'après ta maturité C++esque, je dirais... au moins 35 non !?:D  
 
 




On ne demande pas son age a une dame...
Aller bon, juste pour te narguer :D
J'ai 30 ans, deux enfants, et un mari qui peut passer pour une brute epaisse :D...
Et je ne suis informaticienne de formation mais chimiste (enfin on va dire chimiste ce sera plus simple) :D
Comme mon mari

n°77963
El_gringo
Posté le 04-12-2001 à 11:34:58  profilanswer
 

chrisbk a écrit a écrit :

 
 
pourquoi ils sont fait quoi encore ? ils ont pirate ton IE pour qu'il plante sur les site de wxWindows ? :D  




 
J'vais quand même pas dire que c pas faute ! (il est fou lui :D)
 
ms plus sérieusement, quand tu bosses avec VC++ et les MSDN, ils se débrouille pour que tu penses que la MFC c le top, et que c d'ailleur le seul truc  qui permette de faire ce pour quoi c'est fait !

n°77967
chrisbk
-
Posté le 04-12-2001 à 11:36:58  profilanswer
 

El_Gringo a écrit a écrit :

 
 
J'vais quand même pas dire que c pas faute ! (il est fou lui :D)
 
ms plus sérieusement, quand tu bosses avec VC++ et les MSDN, ils se débrouille pour que tu penses que la MFC c le top, et que c d'ailleur le seul truc  qui permette de faire ce pour quoi c'est fait !  




 
 
bah dis logique, il fait sa pub :D Enfin quoi, il fait pas dans l'humanitaire, le billou :D

n°77969
minusplus
Posté le 04-12-2001 à 11:38:18  profilanswer
 

BENB a écrit a écrit :

 
On ne demande pas son age a une dame...  
Aller bon, juste pour te narguer :D  
J'ai 30 ans, deux enfants, et un mari qui peut passer pour une brute epaisse :D...  
Et je ne suis informaticienne de formation mais chimiste (enfin on va dire chimiste ce sera plus simple) :D  
Comme mon mari  




vous vous êtes rencontrés à la lumière d'un bec bunsen ?  
 
:D

n°77970
godbout
Génial.
Posté le 04-12-2001 à 11:38:59  profilanswer
 

minusplus a écrit a écrit :

 
vous vous êtes rencontrés à la lumière d'un bec bunsen ?  
 
:D  




 
merde et moi qui voulait pas deranger en disant une connerie :D

n°77972
BENB
100% Lux.
Posté le 04-12-2001 à 11:42:05  profilanswer
 

El_Gringo a écrit a écrit :

 
 
J'vais quand même pas dire que c pas faute ! (il est fou lui :D)
 
ms plus sérieusement, quand tu bosses avec VC++ et les MSDN, ils se débrouille pour que tu penses que la MFC c le top, et que c d'ailleur le seul truc  qui permette de faire ce pour quoi c'est fait !  




C'est leur produit, c'est normal qu'il le mettent en avant...
Et je ne dis pas tant que ce n'est pas bien, mais...
 
Le principal reproche que je fasse au MFC comme a Win32 c'est de deformer completement le code, a tel point que le portage d'un appli Win vers Unix devient trea dur car il ne suffit pas de changer l'interface, car avaec les MFC tu a tendance a tout melanger...
 
Aujourd'hui le portage te parait secondaire, mais la monte de Linux va sans doute changer la donne. Dans le monde la simulation les stations Unix (HP - SUN) sont encore tres presente, et la possibilite d'avoir un meme code pour toute les plateformes est precieux...

n°77974
chrisbk
-
Posté le 04-12-2001 à 11:43:20  profilanswer
 

BENB a écrit a écrit :

 
Aujourd'hui le portage te parait secondaire, mais la monte de Linux va sans doute changer la donne




 
ca fait quand meme deja qqes annees que j'entend ca et je vois tjs rien venir... (pas que ca me derange, d'ailleurs..)

n°77975
BENB
100% Lux.
Posté le 04-12-2001 à 11:45:00  profilanswer
 

minusplus a écrit a écrit :

 
vous vous êtes rencontrés à la lumière d'un bec bunsen ?  
 
:D  




:lol:  
Alors c'etait lui qui le tenait, parce que moi avec des cinq pouces sur chacune de mes deux mains gauches :D
 
Mais oui, on c'est rencontre a l'ecole, mais c'est une longue histoire (il a eu du courage) que j'ai deja du raconter sur Bla-Bla :D

n°77976
chrisbk
-
Posté le 04-12-2001 à 11:45:30  profilanswer
 

BENB a écrit a écrit :

 
Mais oui, on c'est rencontre a l'ecole, mais c'est une longue histoire (il a eu du courage) que j'ai deja du raconter sur Bla-Bla :D  




 
le lien ! le lien ! :D

n°77980
El_gringo
Posté le 04-12-2001 à 11:46:33  profilanswer
 

BENB a écrit a écrit :

 
C'est leur produit, c'est normal qu'il le mettent en avant...
Et je ne dis pas tant que ce n'est pas bien, mais...
 
Le principal reproche que je fasse au MFC comme a Win32 c'est de deformer completement le code, a tel point que le portage d'un appli Win vers Unix devient trea dur car il ne suffit pas de changer l'interface, car avaec les MFC tu a tendance a tout melanger...
 
Aujourd'hui le portage te parait secondaire, mais la monte de Linux va sans doute changer la donne. Dans le monde la simulation les stations Unix (HP - SUN) sont encore tres presente, et la possibilite d'avoir un meme code pour toute les plateformes est precieux...  




 
Mais c Normal, les MFC, c pas utilisé uniquement comme des classes fonctionnelles ou pour l'interface graphique. Quand on utilise bien les MFC, on le fait complètement, et à ce moment là, toute la structure de l'application est MFC. MFC, c une façon de programmer...

n°77982
BENB
100% Lux.
Posté le 04-12-2001 à 11:48:42  profilanswer
 

chrisbk a écrit a écrit :

 
 
ca fait quand meme deja qqes annees que j'entend ca et je vois tjs rien venir... (pas que ca me derange, d'ailleurs..)  




Ben la je trouve que ca commence a venir, et je vois la boite pour laquelle je vais bosser apres mes conges maternite propose ses produits pour stations HP/SUN/Linux/WIN...
 
et avec la monte en puissance des PC face aux stations ca fait une offre particulierement concurentielle...

n°78249
ayachi
Posté le 04-12-2001 à 21:09:03  profilanswer
 

BENB a écrit a écrit :

 
Si tu veux tu peux faire une instanciation explicite:
class test<int>;
ou mieux
typedef test<int> testint;  




 
ça marchera pas ( et j'ai vérifié quand même ) car même les méthodes ne seront compilées que si on les utilisent.
 
par exemple
dans le test6.h
template<typename Type> class test6
{
 public:
  test6( const Type& t );
 
  Type get( );
 
 private:
  Type val;
};
 
#include "test6.h"
 
 
Dans le test6.cpp
template<typename Type> test6<Type>::test6( const Type& t )
{
 this->val = t;
}
 
template<typename Type> Type test6<Type>::get( )
{
 return val;
}
 
class test6<int>;
 
 
dans le main.cpp
#include "test6.h"
void main( )
{
 int i = 0;
 test6<int> t( 5 );
 
 i = t.get( );
 
}
 
le linker va me dire que le test6<int>::get( ) n'est pas disponible.

n°78384
LeGreg
Posté le 05-12-2001 à 11:57:54  profilanswer
 

ayachi a écrit a écrit :

 
ça marchera pas ( et j'ai vérifié quand même ) car même les méthodes ne seront compilées que si on les utilisent.
dans le main.cpp
#include "test6.h"
void main( )
{
 int i = 0;
 test6<int> t( 5 );
 
 i = t.get( );
 
}
le linker va me dire que le test6<int>::get( ) n'est pas disponible.  




 
j'crois que tu n'as pas bien compris
il s'agit d'instancier un template ici  
et pas une classe
(le template = classe de class, c'est clair non :D ?)  
Si tu forces l'instanciation de ton template
avec le typdef par exemple
il va creer le code objet que ton linker pourra
linker.
Et il faut l'appeler par son nouveau nom, hein !
pas par l'ancien sinon il va cherche le code de ton
template !
 
A+
LEGREG

n°78413
BENB
100% Lux.
Posté le 05-12-2001 à 13:30:32  profilanswer
 

Meme si tu l'instancie, il faut que le code soit dans les headers...  
le fait de l'instancier ameliore les choses quand tu utilise les templates dans des situations compliquees.

n°78535
ayachi
Posté le 05-12-2001 à 17:35:08  profilanswer
 

legreg a écrit a écrit :

 
 
j'crois que tu n'as pas bien compris
il s'agit d'instancier un template ici  
et pas une classe
(le template = classe de class, c'est clair non :D ?)  
Si tu forces l'instanciation de ton template
avec le typdef par exemple
il va creer le code objet que ton linker pourra
linker.
 
Et il faut l'appeler par son nouveau nom, hein !
pas par l'ancien sinon il va cherche le code de ton
template !
 
A+
LEGREG  




 
oui mais il ne va pas générée le code pour les membres, il faudrait que dans le cpp je l'utilise! et quand le linker linkera main.obj et test6.obj il trouvera pas dans test6.obj
le test6<int>::get()
enfin c'est bon j'ai vu l'eexemple d'atl et effectivement  
y'a pas moyen de t'en sortir, le code doit être inclu d'une façon ou une autre dans le main.cpp
 
Merci à tous :)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [C++] question sur les templates

 

Sujets relatifs
Petite question au sujet de Borland C++ Builder 5.......[PHP] Question super facile :))) Venez !!!
Question en C : Warning à la conpetite question php
Petite question niveau phpUne question ???
[ASP] Petite question de bleu[C et VB] question sur les DLL
[web] une question toute simple : lien long dans un mailQuestion en java !!!
Plus de sujets relatifs à : [C++] question sur les templates


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR