我试图用c++中的变体来表示一个PDF对象类型。一个PDF对象是以下几种类型之一。
Boolean
Integer
Real
String
Name
Stream
Array<Object>
Map<Object, Object>
正如你所看到的 Object
类型是相互递归的,因为 Array
类型将需要一个声明 Map
类型,这就需要声明 Array
类型。我怎样才能在c++中表示这个类型?如果变体不是最好的方法,那么什么是最好的方法呢?
这是我目前尝试过的方法,但由于以下要求,它无法编译 std::unordered_map
(我想) http:/coliru.stacked-crooked.coma699082582e73376e。
由于你使用的是 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);
它的工作原理和预期一样。