C++互递归变量类型

问题描述 投票:4回答:2

我试图用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。

c++ recursion types boost-variant mutual-recursion
2个回答
5
投票

由于你使用的是 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);

它的工作原理和预期一样。

© www.soinside.com 2019 - 2024. All rights reserved.