Métaprogrammation, T par valeur ou référence ?
Bonjour à tous,
J'ai une classe template de ce style
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;
}; |
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:
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:
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