【问题标题】:Boost::variant with a object which references the same variantBoost::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;

【问题讨论】:

  • 不可能,除非你使用指针。这与类或结构不能包含自己的类型的原因相同。
  • 您可以将typedefed 的每个类前向声明​​到变体中。声明 typedef 后,定义所有类,然后使用 typedef 定义变体的实例。
  • @SamVarshavchik 很难理解你的意思,你能提供答案吗?
  • @Someprogrammerdude:std::vector“是”指针之类的。 struct S { std::vector&lt;S&gt; children; }; 是可能的。
  • @Jarod42 你为什么要删除你的解决方案?我刚刚测试了它,它可以工作。

标签: c++ boost-variant


【解决方案1】:

如果顺序正确,您可能会:

class A {
   //...
};

class B {
   //...
};

class C;
using PossibleValues = std::variant<A, B, C>;

class C {
   //...
   std::vector<PossibleValues> storage; // reference to variant
   //...
};

Demo

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 2022-07-08
  • 2020-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多