surcharge de méthode par valeur de retour
Je sais, le C++ ne le permet pas.
Ce code n'est pas valide:
Code:
1 2 3 4 5 6 7
| struct query
{
long get()
{ return 5l; }
std::string get()
{ return "abc"; }
}; |
Comment contourner le problème sans passer par un variant géré au runtime.
Voici une solution:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| struct query;
struct my_variant
{
query & f_q;
my_variant(query & q) : f_q(q) {}
template<typename T>
operator T()
{
T t;
f_q.get(t);
return t;
}
};
struct query
{
void get(long & l)
{ l=5l; }
void get(std::string & s)
{ s="abc"; }
my_variant get()
{
return my_variant(*this);
}
};
void main()
{
query q;
long i = q.get();
std::string s = q.get();
} |
Si quelqu'un a mieux je suis preneur :D