Bonjour à tous,

J'ai une classe template de ce style
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;
};
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...).

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
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
};
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
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;
Mais il me semble sur sizeof(T) est une expression dynamique, donc le compilateur n'en voudra pas.

Vous pouvez m'aider ?

Merci,

A bientôt