C ++ itera en un campo de estructura anidado con boost fusion adapt_struct

Dosdesbordamiento de pila respuestas sugiera el enfoque utilizando fusion adapt_struct para iterar sobre los campos de estructura. El enfoque se ve bien. Sin embargo, ¿cómo iterar en un campo que en sí mismo es una estructura?

Siguiendo las respuestas anteriores, se me ocurre el siguiente código. El problema está en la cláusula "#if 0" que el código no compila. Como solución alternativa, creé la función "decodificar ()" para llevar un puntero al vacío al argumento de destino. Eso funciona, pero pierde la información de tipo en tiempo de compilación. ¿Hay una solución mejor?

struct Foo_s { int i; };
BOOST_FUSION_ADAPT_STRUCT( Foo_s,  (int, i) )

struct Bar_s { int v; Foo_s w; };
BOOST_FUSION_ADAPT_STRUCT( Bar_s, (int, v)  (Foo_s, w) )

struct AppendToTextBox {
    template <typename T> void operator()(T& t) const {
        int status = 0;
        const char *realname = abi::__cxa_demangle(typeid(t).name(), 0, 0, &status);
        printf("  typename: %s  value: %s  realname: %s\n", typeid(t).name(),
               boost::lexical_cast<std::string>(t).c_str(), realname);
        std::string rn(realname);
        if ( rn.rfind("_s") == rn.size()-2 ) {
#if 0 /* this can not compile */
            for_each(t, AppendToTextBox());
#else
            decode(&t, rn);
#endif
        }
    }
};

void decode(void *f, std::string & intype ) {
    if ( intype.find("Foo_s") == 0 ) 
        for_each( *(Foo_s *)f, AppendToTextBox());
};

int main(int argc, char *argv[]) {
  Bar_s f = { 2, { 3 } };
  for_each(f, AppendToTextBox());
  return 0;
}

He visto enwikipedia en lugar de pasar una cadena de tipo "intype" puede usar typeid y dynamic_cast. Pero eso solo será una mejora menor. Estoy buscando una solución que sea más intrínseca a C ++ o aumente el diseño del lenguaje.

Respuestas a la pregunta(2)

Su respuesta a la pregunta