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

  FORUM HardWare.fr
  Programmation
  C++

  [C++] spécialisation

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] spécialisation

n°967500
xterminhat​e
Si vis pacem, para bellum.
Posté le 31-01-2005 à 23:04:04  profilanswer
 

Je souhaite spécialiser un modèle d'objet sans définir de spécialisation des fonctions membres communes avec le modèle... et bien je n'y arrive pas. Sachant également que je souhaite séparer déclaration et définition pour chaque template.


---------------
Cordialement, Xterm-in'Hate...
mood
Publicité
Posté le 31-01-2005 à 23:04:04  profilanswer
 

n°967510
Taz
bisounours-codeur
Posté le 31-01-2005 à 23:06:29  profilanswer
 

une classe de base ?

n°967513
xterminhat​e
Si vis pacem, para bellum.
Posté le 31-01-2005 à 23:07:08  profilanswer
 

partons d'une classe de base genre foo...


---------------
Cordialement, Xterm-in'Hate...
n°967539
Taz
bisounours-codeur
Posté le 31-01-2005 à 23:13:29  profilanswer
 

moi j'ai pas bien compris ce que tu veux faire. Donne un exemple simple.

n°967551
xterminhat​e
Si vis pacem, para bellum.
Posté le 31-01-2005 à 23:17:11  profilanswer
 

Code :
  1. template< typename X, typename Y >
  2. struct foo
  3. {
  4. void affiche() const;
  5. };
  6. template<>
  7. struct foo< int, int* >
  8. {
  9. void affiche() const;
  10. }
  11. template< typename X, typename Y >
  12. void foo< X, Y >::affiche() const { cout << "fonction générique X/Y" << endl; }
  13. int main()
  14. {
  15.    foo<int,int*>().affiche(); // erreur de link, trouve pas la définition de la fonction membre.
  16. }


---------------
Cordialement, Xterm-in'Hate...
n°967560
Taz
bisounours-codeur
Posté le 31-01-2005 à 23:19:36  profilanswer
 

ah ben héritage ça marchera superbement. Quand tu spécialises, tu spécialises tout. Cela dit après tu commences à mixer template et virtual, prudence

n°967565
xterminhat​e
Si vis pacem, para bellum.
Posté le 31-01-2005 à 23:20:17  profilanswer
 

Justement, le delannoy précise le contraire et je voulais en avoir le coeur net... boulette du petit claude donc ?!


---------------
Cordialement, Xterm-in'Hate...
n°967567
Taz
bisounours-codeur
Posté le 31-01-2005 à 23:20:51  profilanswer
 

il précise quoi ?

n°967573
xterminhat​e
Si vis pacem, para bellum.
Posté le 31-01-2005 à 23:22:57  profilanswer
 

Dans le cas d'une spé de modèle de classe, il est possible de définir des versions spécialisées de certaines fonctions membre, ou ne pas en définir, auquel cas on ferait appel aux fonctions membre du modèle.


---------------
Cordialement, Xterm-in'Hate...
n°967576
Taz
bisounours-codeur
Posté le 31-01-2005 à 23:24:02  profilanswer
 

struct foo< int, int* >
 
 
ben la tu spécialises la classe

mood
Publicité
Posté le 31-01-2005 à 23:24:02  profilanswer
 

n°967578
xterminhat​e
Si vis pacem, para bellum.
Posté le 31-01-2005 à 23:24:30  profilanswer
 

donc ce que dit delannoy devrait s'appliquer


---------------
Cordialement, Xterm-in'Hate...
n°967583
xterminhat​e
Si vis pacem, para bellum.
Posté le 31-01-2005 à 23:26:20  profilanswer
 

Ce que je comprends : Les fonctions membre non spécialisées d'une spécialisation de modèle de classe font appel aux fonctions membre du modèle de classe.


---------------
Cordialement, Xterm-in'Hate...
n°967585
Taz
bisounours-codeur
Posté le 31-01-2005 à 23:26:59  profilanswer
 

ben ça s'applique : ici, tu ne définis pas.

n°967593
xterminhat​e
Si vis pacem, para bellum.
Posté le 31-01-2005 à 23:28:28  profilanswer
 

Je ne spécialise pas affiche() dans foo<int,int*>, il n'appelle pourtant pas foo<X,Y>::affiche() pour autant !


---------------
Cordialement, Xterm-in'Hate...
n°967620
Taz
bisounours-codeur
Posté le 31-01-2005 à 23:37:03  profilanswer
 

tu vois quoi comme relation entre foo<X, Y> et foo<int, int*> à part le nom ?

n°967636
xterminhat​e
Si vis pacem, para bellum.
Posté le 31-01-2005 à 23:39:39  profilanswer
 

Et bien d'apres ce que je comprends du delannoy, les fonctions membres de foo<int,int*> sont celle de foo<X,Y> par défaut.


---------------
Cordialement, Xterm-in'Hate...
n°967646
Taz
bisounours-codeur
Posté le 31-01-2005 à 23:42:12  profilanswer
 

ben non. Tu as d'ailleurs tout un tas de piège comme ça. Tu as :
 
template<typename T>
class Foo
{
  public:
  // plein de truc !
};
 
template<>
class Foo<void>
{
  public:
  // prends toi ça, y a rien ici !
};

n°967669
xterminhat​e
Si vis pacem, para bellum.
Posté le 31-01-2005 à 23:46:57  profilanswer
 

oui, ok pour ton exemple.
 
Je m'exprime mal. Si dans la classe spécialisée tu rappelles les déclarations des fonctions membre de la classe générique, alors d'apres ce que dis delannoy, le compilateur va chercher l'implémentation des fonctions membre de la classe générique.


Message édité par xterminhate le 31-01-2005 à 23:47:16

---------------
Cordialement, Xterm-in'Hate...
n°967673
xterminhat​e
Si vis pacem, para bellum.
Posté le 31-01-2005 à 23:48:05  profilanswer
 

Je pense qu'il y a une erreur dans le delannoy. Nos exemples le prouvent.


---------------
Cordialement, Xterm-in'Hate...

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

  [C++] spécialisation

 

Sujets relatifs
spécialisation de fonctions membres (template) d'une classe templateenlever la spécialisation de certains caractères
Probleme spécialisation de templateprincipe de généralisation/ spécialisation
[C++] problème avec une spécialisation de classeSpécialisation des templates
Spécialisation template & Pétage de plomb 
Plus de sujets relatifs à : [C++] spécialisation


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