[C++] spécialisation

spécialisation [C++] - C++ - Programmation

Marsh Posté le 31-01-2005 à 23:04:04    

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...
Reply

Marsh Posté le 31-01-2005 à 23:04:04   

Reply

Marsh Posté le 31-01-2005 à 23:06:29    

une classe de base ?

Reply

Marsh Posté le 31-01-2005 à 23:07:08    

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


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

Marsh Posté le 31-01-2005 à 23:13:29    

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

Reply

Marsh Posté le 31-01-2005 à 23:17:11    

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...
Reply

Marsh Posté le 31-01-2005 à 23:19:36    

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

Reply

Marsh Posté le 31-01-2005 à 23:20:17    

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


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

Marsh Posté le 31-01-2005 à 23:20:51    

il précise quoi ?

Reply

Marsh Posté le 31-01-2005 à 23:22:57    

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...
Reply

Marsh Posté le 31-01-2005 à 23:24:02    

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

Reply

Marsh Posté le 31-01-2005 à 23:24:02   

Reply

Marsh Posté le 31-01-2005 à 23:24:30    

donc ce que dit delannoy devrait s'appliquer


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

Marsh Posté le 31-01-2005 à 23:26:20    

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...
Reply

Marsh Posté le 31-01-2005 à 23:26:59    

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

Reply

Marsh Posté le 31-01-2005 à 23:28:28    

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...
Reply

Marsh Posté le 31-01-2005 à 23:37:03    

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

Reply

Marsh Posté le 31-01-2005 à 23:39:39    

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...
Reply

Marsh Posté le 31-01-2005 à 23:42:12    

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 !
};

Reply

Marsh Posté le 31-01-2005 à 23:46:57    

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...
Reply

Marsh Posté le 31-01-2005 à 23:48:05    

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


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

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed