C ++ itera em campo struct aninhado com boost fusion

Doisstackoverflow respostas Sugiro a abordagem usando a fusão adapt_struct para iterar sobre os campos struct. A abordagem parece legal. No entanto, como você iterar em um campo que em si é uma estrutura?

Seguindo as respostas anteriores, inventei o código abaixo. O problema está na cláusula "#if 0" que o código não compila. Como uma solução alternativa, criei a função "decode ()" para obter um ponteiro vazio para o argumento de destino. Isso funciona, mas perde as informações de tipo em tempo de compilação. Existe uma solução melhor?

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;
}

Eu vi emwikipedia em vez de passar um tipo de string "intype" você pode usar typeid e dynamic_cast. Mas isso será apenas uma pequena melhora. Estou procurando uma solução mais intrínseca ao C ++ ou que aprimore o design de linguagem.

questionAnswers(2)

yourAnswerToTheQuestion