我正在开发一个类似于this的简单状态机。
我正在尝试在单独的类中编码我的状态,如下所示:
// 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
有没有一种方法可以在类中包含变量?
最佳答案
您需要确保两个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(); }
关于c++ - std::variant具有前向声明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60108413/