void printRepresentation(OCRepresentation rep) { for (auto itr = rep.begin(); itr != rep.end(); ++itr) { cout << "\t" << itr->attrname() << ":\t" << itr->getValueToString() << endl; if (itr->type() == AttributeType::Vector) { switch (itr->base_type()) { case AttributeType::OCRepresentation: for (auto itr2 : (*itr).getValue<vector<OCRepresentation> >()) { printRepresentation(itr2); } break; case AttributeType::Integer: for (auto itr2 : (*itr).getValue<vector<int> >()) { cout << "\t\t" << itr2 << endl; } break; case AttributeType::String: for (auto itr2 : (*itr).getValue<vector<string> >()) { cout << "\t\t" << itr2 << endl; } break; default: cout << "Unhandled base type " << itr->base_type() << endl; break; } } else if (itr->type() == AttributeType::OCRepresentation) { printRepresentation((*itr).getValue<OCRepresentation>()); } } }