C++ C++;互递归变量类型

C++ C++;互递归变量类型,c++,recursion,types,boost-variant,mutual-recursion,C++,Recursion,Types,Boost Variant,Mutual Recursion,我试图用变量表示C++中的PDF对象类型。PDF对象是以下对象之一: Boolean Integer Real String Name 流 数组 Map 正如您所看到的,对象类型是相互递归的,因为数组类型需要声明映射类型,这将需要声明数组类型。在C++中,我如何才能代表这种类型?如果变体不是最好的方法,那么什么是 这是我迄今为止尝试过的,但由于std::unordered_map(我想)的要求,它没有编译。既然您使用的是boost::variant,那么使用它的递归包装器有什么错呢

我试图用变量表示C++中的PDF对象类型。PDF对象是以下对象之一:

  • Boolean
  • Integer
  • Real
  • String
  • Name
  • 数组
  • Map
正如您所看到的,
对象
类型是相互递归的,因为
数组
类型需要声明
映射
类型,这将需要声明
数组
类型。在C++中,我如何才能代表这种类型?如果变体不是最好的方法,那么什么是


这是我迄今为止尝试过的,但由于
std::unordered_map
(我想)

的要求,它没有编译。既然您使用的是
boost::variant
,那么使用它的递归包装器有什么错呢

您可以在中看到一个简短的示例:

typedef boost::使_递归_变量<
int
,std::vector
>::键入int\u tree\t;
std::vector子结果;
子结果。推回(3);
子结果。推回(5);
std::vector结果;
结果:推回(1);
结果。推回(子结果);
结果:推回(7);
内部树变量(结果);

问题是数组和字典类型之间存在相互递归。此示例仅显示如何将
int_tree\t
嵌套在自身的变体中,但是我需要引用尚未定义的typedefyet@Ell:我看不到这种递归。两者都指
对象
,我猜这是您正在定义的变量,但我认为
typedef boost::make_recursive_variant::type Object就可以了。啊,当然可以。对不起,我不知道如何使用它,但我当然不需要typedef。非常感谢,我很抱歉没有看到这是第一次解决方案@你不必为此感到抱歉:)@AntonK:我很惊讶
get
不起作用。在这种情况下,我认为您必须切换到基于访问者的方法。
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);