Bonjour à tous,
J'ai une classe template de ce style
Je passe et récupère T par référence. Mais si la taille de T est inférieur à la taille d'une référence, ou d'un pointeur, mieux vaut travailler avec des valeurs (dans le cadre de bool, int, char etc...).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 template<class T> { public: void SetValue(const T& tValue); const T& GetValue(); private: T m_tValue; };
J'avais vu une astuce pour choisir automatiquement le choix de passer par valeur ou référence, mais j'ai pas retrouvé le sujet sur le forum.
J'ai une idée, ça serait de faire
J'ai pensé également à ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 template<class T> class RefType { typedef T& value_type; // par défaut on prend la référence }; template<> class RefType<bool> { typedef bool value_type; // Ici on prend par valeur };
Mais il me semble sur sizeof(T) est une expression dynamique, donc le compilateur n'en voudra pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 template<class T, bool b> class ByRef { typedef T& value_type; }; template<class T> class ByRef<T, false> // Je sais pas si ça compile mais l'idée est là { typedef T value_type; }; ByRef<T, sizeof(T)> val;
Vous pouvez m'aider ?
Merci,
A bientôt
Partager