Rendre un boost::variant récursif "streamable"
Bonjour à tous !
J'utilise une structure récursive de boost::variant pour faire des vecteurs généralisés, à savoir un vecteur dont les éléments sont tous du même type.
Deux cas de figure :
- Cas de base : tous les élements sont des bool, des int ou des float
- Cas récursif : tous les éléments sont des vecteurs généralisés
Code:
1 2 3 4 5 6
| typedef boost::make_recursive_variant<
std::vector<bool>,
std::vector<int>,
std::vector<float>,
std::vector<boost::recursive_variant_>
>::type generic_vector; |
Exemples de telles structures :
Code:
1 2 3 4 5
| generic_array a = std::vector<int>({1,2,3}); // ( 1 2 3 )
generic_array b = std::vector<float>({2.3,2.0}); // ( 2.3 2.0 )
generic_array c = std::vector<generic_array>({a, b}); // (( 1 2 3 ) ( 2.3 2.0 ))
generic_array d = std::vector<bool>({false}); // ( false )
generic_array e = std::vector<generic_array>({c, b, d}); // ((( 1 2 3 ) ( 2.3 2.0 )) ( 2.3 2.0 ) ( false )) |
Auriez-vous une idée pour afficher la représentation comme dans les commentaires ?
Code:
1 2 3 4
| ostream& operator<< (ostream& os, const generic_array& A) {
// ????
return os;
} |
D'après la doc de boost::variant : a variant is streamable if all its contained types are streamable.
Donc pour pourvoir définir l'opérateur << pour mon vecteur générique, il faut déjà que j'ai défini cet opérateur pour le vecteur générique vu que c'est récursif 8O...
Comment je peux m'en sortir ?
Merci !!
Jean