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
Ceci dit, je ne pense pas toujours à tout, donc je vous laisse y réfléchir si vous avez une solution à proposer^^
_________________
Dur Dabla, pour qui voudrait écouter un brin de metal celtique.