std::string Visitor::visit(variant & object) { create_model_map(); Derived *base = (Derived *)*object; std::string classname; if (!object) { printf("visit was empty!\n"); return ""; } if (ClassMap::is_recognized_classname(object.type().name())) { classname = base->classname(); } else { if (object.isString() || object.isType<bool>()) classname = "quoted"; else if (object.isType<std::vector<variant> >()) classname = "array"; else classname = "literal"; } method_dict_map_t method_dict_map = method_dictionary(); if (method_dict_map[classname]) { return (this->*method_dict_map[classname])(object); } else { printf("Visitor::visit failed to find method: %s(%s)\n", classname.c_str(), object.type().name()); return ""; } }