Rajouter des unités à une classe
Bonjour à tous,
Je souhaite rajouter des unités à une classe, cependant, je ne vois toujours pas comment le faire sans impacter les performances/maintenabilité du code. Imaginons que j'ai une classe comme ceci :
Code:
1 2 3 4
| struct MaClasse
{
MaClasse f(const MaClasse&);
}; |
Et que je vais lui donner une unité (un booléen qui me dit si je suis dans le monde réel ou sur l'écran par exemple). Le plus simple serait de faire cela (c'est ce que j'ai trouvé sur internet notamment).
Code:
1 2 3 4 5
| template<bool WorldView>
struct MaClasse
{
MaClasse f(const MaClasse&);
}; |
Le problème avec ce code, c'est que si "f" est grosse, le compilateur ne va pas l'inliner et va générer deux instances de f (dommage, puisque f est strictement identique dans les deux cas). De plus, ça m'oblige à mettre la définition de f en dehors d'un .cpp.
Une autre solution que j'ai envisagé est :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| struct MaClasseBase
{
MaClasseBase f(const MaClasseBase& );
};
template<bool WorldView>
struct MaClasse : private MaClasseBase
{
inline MaClasse f(const MaClasse& c){return MaClasseBase::f(c);}
private :
MaClasse(const MaClasseBase& n) : MaClasse(n){}
}; |
La, on résout les deux problèmes normalement. Le problème, c'est que j'ai du code qui ne sert à rien... ce qui rend le tout plus contraignant à maintenir si MaClasseBase change.
Avez-vous une idée pour résoudre ce problème (j'ai aussi pensé au CRTP, mais le problème, c'est que la classe de base devient template, donc ça n'apporte rien) ?
Merci pour votre aide
PS : J'ai le même problème avec une classe B qui souhaite étendre A mais en faisant que les fonctions qui renvoient des A renvoient des B. Utiliser le CRTP pour résoudre le problème pose les mêmes problèmes que la première solution il me semble. Si jamais cette question n'est pas naturellement résolue par la question d'au dessus, j'ouvrirai un nouveau thread.