gpt4 book ai didi

C++:如何写这个抽象类?

转载 作者:行者123 更新时间:2023-11-30 03:14:08 25 4
gpt4 key购买 nike

我想为有限状态机定义一个抽象类。

class State
{
virtual State transit(const Input &i) = 0;
};

我的想法是我想要一个原型(prototype)函数“transit”,它接受输入并转换到下一个状态。不幸的是,编译器不允许这样做。

有没有办法提供这样的抽象类?

我的想法是提供一个状态机的抽象,如何运行状态机的逻辑不需要为一系列问题而改变,比如接受输入并进入下一个状态等。但是这个抽象并不关心状态和输入是如何定义的,可能像下面这样。

template<S, I>
class StateMachine
{
public:
void set_initial_state(const S &is)
{
current_state = is;
}
void take_input(const I &input)
{
S next_state = current_state.transit(input);
current_state = next_state;
}
private:
S current_state;
};

在使用这个模板的时候,我想给“S”提供更多的提示。例如,它必须具有“中转”功能。这就是我提出“状态”抽象类的想法。

最佳答案

是的,有。你的编译器不能让你返回一个 State 对象,因为它有 incomplete type 因此它不知道如何构造它。您可能希望返回对 this 的引用,例如 cout 的 operator<< 。

因为你还没有真正指定你的整体设计是什么样子,我帮不了你太多,但我认为对于状态机来说,通常最好有一个 StateMachine 和一个 所有状态的枚举类。有点像

class StateMachine {
enum class State{
state1,
state2,
};
virtual void changeState(State to) { /* do Something */}
};

关于C++:如何写这个抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58124923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com