具有变体的递归数据结构

它的

在C ++ 17中,是否可以声明这样的内容以使其编译:

struct Foo;

using Var = std::variant<Type1, Type2, Foo>; // uses Foo

struct Foo {
    std::vector<Var> member; // uses Var
}

这是一个简化的示例,但是我需要像这样的递归数据结构。

罗密欧

是的,有可能。您所需要的只是某种间接处理/容器,它可以与不完整类型一起正常工作例子有:std::unique_ptrstd::vector,和std::map

struct Foo
{
    std::variant<int, float, std::vector<Foo>> _data;
};

int main()
{
    Foo a{std::vector<Foo>{Foo{}, Foo{}}};
}

现场魔盒示例


为了避免定义“无限大小”变体,需要使用间接寻址。以下是有关该主题的一些学习资源:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章