我试图用变体表示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.com/a/699082582e73376e
答案 0 :(得分:5)
由于您正在使用boost::variant
,使用其递归包装器有什么问题?
您可以在tutorial中看到一个简短示例:
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);
它按预期工作。