C++ Взаимно рекурсивный вариантный тип

Я пытаюсь представить тип объекта PDF в C++, используя варианты. PDF-объект является одним из следующих:

  • Boolean
  • Integer
  • Real
  • String
  • Name
  • Stream
  • Array<Object>
  • Map<Object, Object>

Как видите, Object тип является взаимно рекурсивным, потому что Array тип потребует декларации Map тип, который потребует декларации Array тип. Как я могу получить представление об этом типе в C++? Если вариант не лучший путь, то что?

Вот что я пробовал до сих пор, но он не компилируется из-за требований std::unordered_map (Я думаю) http://coliru.stacked-crooked.com/a/699082582e73376e

1 ответ

Решение

Так как вы используете boost::variantчто плохого в использовании его рекурсивных оболочек?

Вы можете увидеть короткий пример в руководстве:

typedef boost::make_recursive_variant<
      int
    , std::vector< boost::recursive_variant_ >
    >::type int_tree_t;

std::vector< int_tree_t > subresult;
subresult.push_back(3);
subresult.push_back(5);

std::vector< int_tree_t > result;
result.push_back(1);
result.push_back(subresult);
result.push_back(7);

int_tree_t var(result);

И это работает, как ожидалось.

Другие вопросы по тегам