Я пытаюсь представить тип объекта 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
Так как вы используете 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);
И это работает, как ожидалось.
Других решений пока нет …