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

 


Dernière réponse
Sujet : [C++] Très Urgent !!! Question de vie ou de ...
Amadeus C vrai c elegant les templates et en plus c de l'open source de fait :)

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Amadeus C vrai c elegant les templates et en plus c de l'open source de fait :)
minusplus ah ok, il a pas tout fait d'un bloc !
 

Citation :


Pour preciser encore plus, s'il veut faire simple, il doit copier le contenu de son tableau.cc ds tableau.h et virer tableau.cc du projet.


 
Y'a une (a merde, on peut pas dire bibliothèque...) disons un toolkit d'algèbre linéraire qui est fait comme ça : c'est un ensemble de header à inclure sans binaires. Je trouve ça trés bien : c'est simple à utiliser et trés intuitif du fait des templates...

kadreg

Amadeus a écrit a écrit :

Pour preciser encore plus, s'il veut faire simple, il doit copier le contenu de son tableau.cc ds tableau.h et virer tableau.cc du projet.




 
Personnellement, je ferais un  
#ifdef GGG
   #include "tableau.cc"  
#endif
 
à la fin de tableau.h. C'est le même esprit que ta proposition.
 
J'ai déjà fait ce genre de manip sur un gros projet. C'est une limitation de gcc qui gère les template de manière bizarre.

 

[edit]--Message édité par kadreg--[/edit]

Amadeus Pour preciser encore plus, s'il veut faire simple, il doit copier le contenu de son tableau.cc ds tableau.h et virer tableau.cc du projet.

 

[edit]--Message édité par Amadeus--[/edit]

Amadeus Ben non ila compile les templates dans un fichier a part et il na garde ds le header que les decl, ensuite il veut linker les deux alors que le compilo (avant le linker) a besoin de connaitre le type des templates.
 
PS : c aussi un pb des templ c que tu peu pas par ex fournir une lib de templ avec un header qui contient juste les decl, enfin pas de maniere triviale
 

minusplus a écrit a écrit :

je comprends pas où est son problème ?
 
Les templates sont déclarés dans tableau.h qui est inclus dans tableau.cc et main.cc, non ? Et ben si il compile sans 'external-templates', ça devrait marcher ?



 

[edit]--Message édité par Amadeus--[/edit]

minusplus je comprends pas où est son problème ?
 
Les templates sont déclarés dans tableau.h qui est inclus dans tableau.cc et main.cc, non ? Et ben si il compile sans 'external-templates', ça devrait marcher ?
Amadeus Ouais. Mais pour pas faire compilqué le mieux c de regrouper ttes les templates (les definitions) dans un header et l'include ds chaque fichier qui les utilise. Le code sera un peu plus gros mais bon qui s'en soucie aujourdhui :)
 

minusplus a écrit a écrit :

C'est de ça que vous parlez ?  
 

Code :
  1. -fexternal-templates
  2.               Produce  smaller code for template declarations, by
  3.               generating only a  single  copy  of  each  template
  4.               function  where  it is defined.  To use this option
  5.               successfully, you must also mark all files that use
  6.               templates with either `#pragma implementation' (the
  7.               definition) or `#pragma interface'  (declarations).
  8.               When     your     code     is     compiled     with
  9.               `-fexternal-templates', all template instantiations
  10.               are  external.   You must arrange for all necessary
  11.               instantiations  to  appear  in  the  implementation
  12.               file;  you  can  do this with a typedef that refer­
  13.               ences each instantiation needed.  Conversely,  when
  14.               you    compile    using    the    default    option
  15.               `-fno-external-templates', all template  instantia­
  16.               tions are explicitly internal.


 
(man gcc)



minusplus C'est de ça que vous parlez ?  
 

Code :
  1. -fexternal-templates
  2.               Produce  smaller code for template declarations, by
  3.               generating only a  single  copy  of  each  template
  4.               function  where  it is defined.  To use this option
  5.               successfully, you must also mark all files that use
  6.               templates with either `#pragma implementation' (the
  7.               definition) or `#pragma interface'  (declarations).
  8.               When     your     code     is     compiled     with
  9.               `-fexternal-templates', all template instantiations
  10.               are  external.   You must arrange for all necessary
  11.               instantiations  to  appear  in  the  implementation
  12.               file;  you  can  do this with a typedef that refer­
  13.               ences each instantiation needed.  Conversely,  when
  14.               you    compile    using    the    default    option
  15.               `-fno-external-templates', all template  instantia­
  16.               tions are explicitly internal.


 
(man gcc)

Amadeus Tu ne peux pas faire une compilation separée de templates : ton header doit contenir les definitions et donc le source de tes templates. c'est pour une raison tres simple : le compilo doit connaite le type au moment de la compilation.
esseki J'ai un très gros problème assez compliqué, je vais essayer d'être le plus clair possible.
 
J'ai un programme développé sur plusieurs fichiers (j'utilise "make" pour l'édition des liens et obtenir l'exécutable). Dans ce programme j'ai 2 fichiers ("tableau.h" comme fichier d'en-tête et "tableau.cc" pour le code des fonctions). Dans "tableau.h" j'ai déclaré une classe générique "tableau" (utilisation de template). Lorsque je compile tout se déroule normalement (j'ai pris des précautions pour la compilation séparée des class template avec gcc.) Lorsque dans mon fichier "main.cc" (celui qui contient le     main() ) je fais une instanciation pour ma class "tableau" avec le type "int" par exemple, tout se compile sans problème. Lorsque dans mon main() je fais appel à une fonction membre de ma class "tableau" dont le code se trouve dans le fichier d'en-tête "tableau.h" car il est suffisamment cours, tout se passe sans problème. Par contre lorsque je fait appel à une fonction membre dont seule l'en-tête a été codée dans "tableau.h" et le corps dans "tableau.cc" (compilation séparée donc), le compilateur me répond qu'il ne peut pas trouver la fonction en question. J'en conclu que mon fichier "tableau.cc" n'est pas correctement construit.
 
J'en fais donc appel à votre "bon coeur", si vous avez une solution ou un site internet qui traiterait de "class template et compilation séparée" je suis preneur.
 
Dernière précision : comme vous l'aurez compris, je suis très pressé aussi, le plus vite sera le mieux.
 
Merci d'avance.

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)