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
Exemples de telles structures :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
Auriez-vous une idée pour afficher la représentation comme dans les commentaires ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ))
D'après la doc de boost::variant : a variant is streamable if all its contained types are streamable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ostream& operator<< (ostream& os, const generic_array& A) { // ???? return os; }
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...
Comment je peux m'en sortir ?
Merci !!
Jean
Partager