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 : 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;
Exemples de telles structures :
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 ))
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
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 ...

Comment je peux m'en sortir ?

Merci !!

Jean