Boost::variant 与引用相同变体的对象
Posted
技术标签:
【中文标题】Boost::variant 与引用相同变体的对象【英文标题】:Boost::variant with a object which references the same variant 【发布时间】:2021-04-20 14:14:01 【问题描述】:我怎样才能拥有不同对象的变体A, B, C
,其中C
引用了该变体?
class A
...
;
class B
...
;
class C
...
std::vector<PossibleValues> storage; // reference to variant
...
;
boost::variant<A, B, C> PossibleValues;
【问题讨论】:
不可能,除非你使用指针。这与类或结构不能包含自己的类型的原因相同。 您可以将typedef
ed 的每个类前向声明到变体中。声明 typedef
后,定义所有类,然后使用 typedef
定义变体的实例。
@SamVarshavchik 很难理解你的意思,你能提供答案吗?
@Someprogrammerdude:std::vector
“是”指针之类的。 struct S std::vector<S> children; ;
是可能的。
@Jarod42 你为什么要删除你的解决方案?我刚刚测试了它,它可以工作。
【参考方案1】:
如果顺序正确,您可能会:
class A
//...
;
class B
//...
;
class C;
using PossibleValues = std::variant<A, B, C>;
class C
//...
std::vector<PossibleValues> storage; // reference to variant
//...
;
Demo
【讨论】:
看来std::variant
不能有不完整的类型,对吗?
@AntoineMorrier:确实来自stdvariant-and-incomplete-type。 :-(以上是关于Boost::variant 与引用相同变体的对象的主要内容,如果未能解决你的问题,请参考以下文章
boost::variant - 在变体上应用算术的最简单方法
boost::variant 与 bool 和 string
(C++, boost::variant) boost 变体映射的数据类型并对其执行数学运算