C ++相互递归变体类型

时间:2013-09-28 12:26:31

标签: c++ recursion types boost-variant mutual-recursion

我试图用变体表示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

的要求而无法编译

1 个答案:

答案 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);

它按预期工作。