gpt4 book ai didi

C++ FSM 设计和所有权

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:02:12 27 4
gpt4 key购买 nike

我想为此语法实现一个 FSM/“下推自动机”解析器:parser with scopes and conditionals已经被“词法分析”到 Finite State Machine parser

我有以下内容:

class State
{
public:
virtual State* event( const string &token );
State* deleteDaughter();
private:
A* m_parent;
A* m_daughter;
}
class SomeState : public State
{
public:
State* event( const std::string &token );
}

使用 Bevent() 执行(在许多 if-elseif 之后)返回 m_parent->deleteDaughter()。我知道这很可疑(而且它会崩溃),但我需要从女儿 State 返回父 State 并确保女儿 State 没有泄露。

我的事件循环是这样的:

while( somestringstream >> token )
state = state->event();

在你责骂设计和最后一段代码之前,我尝试从 here 扩展一个过于简单的例子。 ,这看起来还不错。为了清楚和简洁起见,我将决定部分移至各州本身。

我知道有很多关于这个主题的书,但我不是计算机科学家/程序员,我想自己学习做这件事(当然,在 SO 所有友好人员的帮助下)。如果概念不清楚,请询问。谢谢!

最佳答案

请随意发表您对此的看法,但我已经想出了如何优雅地处理所有事情:

首先:我的事件循环将保留指向最后创建的 State* 的指针。

第二:每个 State 都有一个指向父 State 的指针,在构造函数中初始化,默认为 0(如果用于除第一个 之外的任何内容,则会发生内存泄漏状态*);这保证了任何状态都不会超出范围。

第三个:State* endOfState() 函数正是这样做的(我为此感到特别自豪。

State* State::endOfState()
{
State* parent = m_parent; // keep member pointer after suicide
delete this;
return parent;
}

当从子类的 event() 中调用它时,它将正确地删除自身,并返回父指针(在阶梯中上升一个)。

如果这仍然包含泄漏,请通知我。如果解决方案不清楚,请询问:)

PS:为了公平起见,灵感来自http://www.codeguru.com/forum/showthread.php?t=179284

关于C++ FSM 设计和所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3176110/

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