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

  FORUM HardWare.fr
  Programmation
  C++

  [ANSI C++] Templates

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ANSI C++] Templates

n°588789
iraysyvalo
Posté le 11-12-2003 à 23:20:24  profilanswer
 

Essayons d'utiliser du standard tout au long de ce topic.  
g++ sera le compilateur de reference.
 
Je suis habitue a l'Ansi C mais je vois les avantages de l'OO en particulier la force des templates.
 
Malheureusment, j'ai toujours un peu de mal avec.  
 
Mon pb actuel, c'est comment declarer des objets specifies de templates.
 
J'ai une class template nommee  

Code :
  1. template<class T>
  2. class Foo {
  3. ...
  4. }


 
Ailleurs, je peux declarer

Code :
  1. Foo<Bar> foo;

tant en argument de fonction que dans le main.  
 
Cependant, quand je le mets dans la partie privee d'une autre classe, le compilateur m'insulte avec

FooBar.h:101: error: 'Foo' is used as a type, but is not defined as a type.


 
Quel est le bleme ??


Message édité par iraysyvalo le 12-12-2003 à 02:23:49
mood
Publicité
Posté le 11-12-2003 à 23:20:24  profilanswer
 

n°588800
Taz
bisounours-codeur
Posté le 11-12-2003 à 23:32:27  profilanswer
 

donne du vrai code. et oublie pas les ;  
 
Foo est token invalide
Foo<Bar> est valide

n°588847
iraysyvalo
Posté le 12-12-2003 à 02:43:47  profilanswer
 

Les ; corriges sur le post initial ..  
 
Finalement, ca marche bien .. le pb etait une erreur de syntaxe sur le nom (tres long a l'origine) de mon template.  
 
Voici ce que j'ai essaye de faire pour ref:

Code :
  1. #ifndef FOO_H
  2. #define FOO_H
  3. template<class T>
  4. class Foo {
  5. public:
  6.   explicit Foo(int foo=1) : foo_(foo){ };
  7.   virtual ~Foo(){ }; // In case u need to inherit from this one.
  8.   void useT();
  9. private:
  10.   int foo_;
  11. };
  12. //////////////////////////////////////////////////////////////////
  13. // Foo class definition (separate compilation model)
  14. #include <iostream>
  15. template<class T>
  16. void
  17. Foo<T>::useT(){ 
  18.   std::cout << "This template instance tag  " << foo_ << std::endl;
  19.   std::cout << "Size of the class parameter " << sizeof (T) << " bytes." << std::endl;
  20. }
  21. #endif//FOO_H


 

Code :
  1. #ifndef BAR_H
  2. #define BAR_H
  3. #include "Foo.h" // We need Foo template.
  4. struct BarBar {
  5.   int barMan;
  6. };
  7. class Bar {
  8. public
  9.   Bar() { };
  10.   ~Bar() { };
  11.   void verbose();
  12. private:
  13.   Foo<BarBar> bar_;
  14. };
  15. #endif//BAR_H


 

Code :
  1. #include "Bar.h"
  2. #include <iostream>
  3. void
  4. Bar::verbose(){
  5.   std::cout << "Seems to work .." << std::endl;
  6.   bar_.useT();
  7. }


Message édité par iraysyvalo le 12-12-2003 à 02:57:05
n°589062
Taz
bisounours-codeur
Posté le 12-12-2003 à 12:39:23  profilanswer
 

  • pitié, pas les trailing _ [:totoz]
  • "Seems to work .." << std::endl -> "Seems to work ..\n"


  • #ifndef BAR_H

#define BAR_H
 
penses au nombre de mec qui ont écrit BAR_H
il te faut un truc assez unique, donc une grosse combinaison > 10caractères nom/projet/date/fichier

n°589423
iraysyvalo
Posté le 12-12-2003 à 18:51:21  profilanswer
 


Heu .. c'etait un exemple rapide pour illustrer le propos :)
 
Sinon tu utilises rien pour distinguer tes membres prives ?

n°589428
Taz
bisounours-codeur
Posté le 12-12-2003 à 18:55:50  profilanswer
 

si mais pas une notation source d'erreur. un my, m, ou autre est peut être préférable et c'est beaucoup plus esthétique.
va voir les tutoriels, et conclue en qu'il vaut mieux utiliser "typename" que "class"

n°589429
nraynaud
lol
Posté le 12-12-2003 à 18:59:27  profilanswer
 

Taz a écrit :

si mais pas une notation source d'erreur. un my, m, ou autre est peut être préférable et c'est beaucoup plus esthétique.
va voir les tutoriels, et conclue en qu'il vaut mieux utiliser "typename" que "class"

J'avais lu un truc comme ça effectivement, maintenant je le fais par réflexe, mais quelle en est la raison ?
"class" ça englobe aussi ce qui n'en est pas (types primitif, structs) il me semble non ?


---------------
trainoo.com, c'est fini
n°589433
Taz
bisounours-codeur
Posté le 12-12-2003 à 19:03:34  profilanswer
 

non.
typename a plus le nom de l'emploi, et malgré l'équivalence pour les  situations de bases, class a un rôle et une signification particulière dans le cas de paramètre template template

n°589683
iraysyvalo
Posté le 12-12-2003 à 22:08:56  profilanswer
 


Bon .. c'est la deuxieme fois que je vois tutos .. mais lesquels ??  
 
Taz, me manges pas, j'aime bien les Taz ;)

n°589750
Joel F
Real men use unique_ptr
Posté le 13-12-2003 à 00:08:30  profilanswer
 

y a des posts fixes , y a les liens ki faut dedans


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

  [ANSI C++] Templates

 

Sujets relatifs
Où trouver les standard ISO ANSI sur C, C++ ou C#[Help] Codages ASCII, ANSI et unicode
[ANSI - C] Mettre dans un tableau 2 dimensionsManipulation d'expression par templates : la vengeance
templates de formulaires pour PHP[C/C++] Les normes ANSI, c99, et autres?
[Meta-prog] Les templates-ExpressionsSpécialisation des templates
[C ANSI] conversion chaine de caractere <=> float ou doubleles templates
Plus de sujets relatifs à : [ANSI C++] Templates


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