Пример #1
0
  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 "";
    }
  }