【问题标题】:Should states in an FSM be friends with the context type?FSM 中的状态是否应该与上下文类型成为朋友?
【发布时间】:2015-09-28 02:46:35
【问题描述】:

我已经构建了一个基于类的下推自动机有限状态机。上下文类(其内部状态正在被修改的类)具有一些只有状态才能访问的方法(增加/减少一些迭代器、推送/弹出状态、设置接受状态等)。现在它们是公开的,因为不同的州需要访问它们。

将方法设为受保护/私有并将状态定义为上下文的朋友会更好吗?

(nb4 "基于意见!")

【问题讨论】:

    标签: c++ friend state-machine pushdown-automaton


    【解决方案1】:

    为一个共同的目的创建一个类的集合是合理的,但是你可以考虑另一种选择。

    举一个非常简短、幼稚的例子:

    class outer
    {
     private:
    
     int a;
     int b;
    
     public:
     class inner
        { public:
          outer * o;
    
          inner( outer * io ) : o( io ) { o->a = 0; }
    
        };
    
    };
    
    int main(int argc, const char * argv[]) 
    {
     outer o;
     outer::inner i( &o );
    
     return 0;
    }
    

    我很快就做到了,所以内部接受指针的构造并不是很好的 C++,所以不要把它当作建议。

    关键是即使内部访问外部的私有成员,它也会编译。

    这是按照您的要求做的另一种方式。

    【讨论】:

    • 此解决方案不能很好地扩展。将内部类的数量增加 10 倍会使其笨拙且难以阅读。 :(
    猜你喜欢
    • 2012-04-17
    • 2021-03-21
    • 1970-01-01
    • 2015-07-27
    • 2011-05-04
    • 2017-01-17
    • 2012-04-11
    • 1970-01-01
    • 2011-08-10
    相关资源
    最近更新 更多