Ell*_*Ell 4 c++ recursion types mutual-recursion boost-variant
我试图用变体表示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的要求而无法编译
既然你正在使用它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);
Run Code Online (Sandbox Code Playgroud)
它按预期工作.