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:
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 à ceciCode:
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:
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