std :: variant具有前向声明

尼基塔·托克(Nikita Took)

我正在研究一个与此类似的简单状态机

我正在尝试在单独的类中编码我的状态,如下所示:

// class StateA; (1)
// class StateB; (2)

using State = std::variant<StateA, StateB>;

class StateA {
  State handle(/* some params */) { return StateB(); };
};

class StateB {
  State handle(/* some params */){ return StateA(); };
};

现在,我的变体对StateA和StateB一无所知,结果变为use of undeclared identifier 'StateA'如果我取消注释(1)和(2)并具有前向声明,那么我得到incomplete type 'StateA' used in type trait expression

有没有一种方法可以在类中包含变量?

r3mus n0x

您需要确保两个variant成员在使用它时都是完整类型,例如,通过将handle方法的定义移到类之外:

#include <variant>

class StateA;
class StateB;

using State = std::variant<StateA, StateB>;

class StateA {
    State handle(/* some params */);
};

class StateB {
    State handle(/* some params */);
};

State StateA::handle() { return StateB(); }

State StateB::handle() { return StateA(); }

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章