void print_introspection(MessagePtr message, const std::string& prefix) { if (!message->hasInstance()) { std::cout << "No instance!" << std::endl; } for(Message::const_iterator it = message->begin(); it != message->end(); ++it) { FieldPtr field = *it; std::cout << prefix << std::string(field->getDataType()) << " " << std::string(field->getName()) << " = "; if (field->isContainer()) std::cout << "["; if (field->isMessage()) { std::cout << std::endl; for(std::size_t i = 0; i < field->size(); i++) { MessagePtr expanded = field->expand(i); if (!expanded) { std::cout << prefix << " (unknown)" << std::endl; continue; } print_introspection(expanded, prefix + " "); } std::cout << prefix; } else { for(std::size_t i = 0; i < field->size(); i++) { if (i > 0) std::cout << ", "; std::cout << field->as<std::string>(i); } } if (field->isContainer()) std::cout << "]"; std::cout << std::endl; } }