在C ++ 17中,是否可以声明这样的内容以使其编译:
struct Foo;
using Var = std::variant<Type1, Type2, Foo>; // uses Foo
struct Foo {
std::vector<Var> member; // uses Var
}
这是一个简化的示例,但是我需要像这样的递归数据结构。
是的,有可能。您所需要的只是某种间接处理/容器,它可以与不完整类型一起正常工作。例子有:std::unique_ptr
,std::vector
,和std::map
。
struct Foo
{
std::variant<int, float, std::vector<Foo>> _data;
};
int main()
{
Foo a{std::vector<Foo>{Foo{}, Foo{}}};
}
为了避免定义“无限大小”变体,需要使用间接寻址。以下是有关该主题的一些学习资源:
David Sankel的CppCon 2016演讲“变量:过去,现在和将来”很好地介绍了各种变体,并介绍了“递归变体”。
我在“使用lambdas pt.2访问变体”一文中简要介绍了“递归变体”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句