具有变体的递归数据结构

时间:2017-04-09 17:02:08

标签: c++ visual-studio-2017

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

struct Foo;

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

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

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

1 个答案:

答案 0 :(得分:5)

是的,有可能。您只需要某种与不完整类型一起正常工作的间接/容器。例如:std::unique_ptrstd::vectorstd::map

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

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

live wandbox example

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