Je sais, le C++ ne le permet pas.
Ce code n'est pas valide:
Comment contourner le problème sans passer par un variant géré au runtime.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 struct query { long get() { return 5l; } std::string get() { return "abc"; } };
Voici une solution:
Si quelqu'un a mieux je suis preneur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(); }
Partager