AccueilAccueil  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  
-32%
Le deal à ne pas rater :
ODR 100€ sur le Pack HP PC Portable – RAM 8Go, 256Go SSD + ...
570.29 € 833.70 €
Voir le deal

 

 [C++] template typedef

Aller en bas 
AuteurMessage
Morwenn
Très bonne participation
Morwenn

Messages : 151
Projet Actuel : Icare

[C++] template typedef Empty
MessageSujet: [C++] template typedef   [C++] template typedef EmptyDim 29 Avr 2012 - 0:11

J'ai beau m'être amélioré en C++ ces derniers temps, il reste certains qui continuent à me paraître impossible à résoudre de manière simple. J'ai notamment un cas épineux faisant intervenir des templates et des alias de noms de classes. Sans plus tarder, voici le problème :

Imaginons que j'aie le code suivant :
Code:

template<typename T>
class A
{
    // ...
};

template<>
class A<int>
{
    // ...
};

template<typename T>
class B
{
    // ...
};

J'ai donc deux classes, A et B, et une spécialisation de A pour le type int.
Maintenant, imaginons que je veux que B<int> fasse exactement la même chose que A<int> mais que ça ne soit valable que pour ce type-là sans avoir à recopier le corps de A<int> à la main dans B<int>.

En gros, en utilisant des typedefs, ça donnerait :
Code:

// C++03
typedef A<int> B<int>;

// C++11
using B<int> = A<int>;

Mais bon, aucune des deux écritures n'est valide. Donc mon problème reste complet. La seule méthode que je vois est complètement sale, mais je vous la présente quand, ne serait-ce que pour vous faire hurler :

Code:

// body.h
// Code contenu dans A<int> et B<int>

Code:

// AB.h
template<typename T>
class A
{
    // ...
};

template<>
class A<int>
{
    #include "body.h"
};

template<typename T>
class B
{
    // ...
};

template<>
class B<int>
{
    #include "body.h"
};

Ceci dit, j'ai une certaine éthique qui m'empêche de coder comme ça, d'autant plus que le code serait chargé deux fois tandis qu'il est le même dans les deux classes.
Bref, c'est simplement pour pouvoir faire des alias de spécialisations, mais j'ai bien l'impression qu'il est impossible de faire quelque chose comme ça malheureusement dans le langage Wink

Ceci dit, je ne pense pas toujours à tout, donc je vous laisse y réfléchir si vous avez une solution à proposer^^

_________________
[C++] template typedef 37115040594310152086589335317875357842n
Dur Dabla, pour qui voudrait écouter un brin de metal celtique.
Revenir en haut Aller en bas
Wargamer
*Excellent utilisateur*
Wargamer

Messages : 6938
Projet Actuel : Bataille de cake au fruits

[C++] template typedef Empty
MessageSujet: Re: [C++] template typedef   [C++] template typedef EmptyDim 29 Avr 2012 - 13:43

Je pense que l'héritage fonctionnerais parfaitement pour ton problème.
class B<int> : A

_________________
[C++] template typedef Wargamer3
Règle #1 du CBNA, ne pas chercher à faire dans la subtilité; personne comprend
Revenir en haut Aller en bas
Morwenn
Très bonne participation
Morwenn

Messages : 151
Projet Actuel : Icare

[C++] template typedef Empty
MessageSujet: Re: [C++] template typedef   [C++] template typedef EmptyDim 29 Avr 2012 - 14:04

La question est : comment n'y ai-je pas pensé plus tôt ? ...
Ça ne sera pas parfaitement une équivalence stricte du point de vue du casting et du down-casting, mais ça devrait couvrir idéalement 90% des problèmes de manière simple.

Merci dans tous les cas. Des fois, on a tellement d'outils sous la main qu'on en finit par oublier les plus évidents^^"

_________________
[C++] template typedef 37115040594310152086589335317875357842n
Dur Dabla, pour qui voudrait écouter un brin de metal celtique.
Revenir en haut Aller en bas
Contenu sponsorisé




[C++] template typedef Empty
MessageSujet: Re: [C++] template typedef   [C++] template typedef Empty

Revenir en haut Aller en bas
 
[C++] template typedef
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Programmation-
Sauter vers: