gpt4 book ai didi

c++ - 如何处理状态转换并将 "if"语句替换为多态类型?

转载 作者:太空狗 更新时间:2023-10-29 22:53:06 25 4
gpt4 key购买 nike

最近我在听一个关于整洁编码的技术讲座。演讲者是一位测试工程师,他强调在代码中避免“if”语句,并尽可能使用多态性。他还提倡反对全局国家。

我非常同意他的观点,但我需要澄清一下在以下情况下使用多态性替换全局状态和“if”语句,

我的文档中有 3 个状态。我想根据文档状态更改 UI 组件的状态。现在,我使用“if” block 和一个保存文档当前状态的枚举类型来转换 UI 组件的状态。

例如:

enum DOC_STATE
{
DOC_STATE_A = 0,
DOC_STATE_B,
DOC_STATE_C
};

void QMainWindow::handleUi(_docState)
{
switch(_docState)
{
case (DOC_STATE_A):
{
menu.disable();
....
}
case (DOC_STATE_B):
{
menu.enable();
...
}
case (DOC_STATE_C):
{
...
}
}

我想我可以为每个状态创建单独的子类,并在每个类中使用 handleUI() 方法。调用 handleUi() 方法调用正确的方法调用。但是假设我在我的文档中维护这些对象,每次状态转换时我如何从一个对象切换到另一个对象?

换句话说,如何在不使用全局状态和“if”或 Switch 语句的情况下通过跟踪文档状态的变化来处理 UI 转换?

我使用 Qt。谢谢。

最佳答案

如果您使用的是 Qt,请查看 The Qt State Machine FrameworkState Machine Examples .当您的框架已经提供跑车时,无需重新发明轮子:)

关于c++ - 如何处理状态转换并将 "if"语句替换为多态类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3088198/

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