FSM中的Should状态与上下文类型为友

Should states in an FSM be friends with the context type?

本文关键字:类型 上下文 中的 Should 状态 FSM      更新时间:2023-10-16

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

将方法设置为protected/private并将状态定义为上下文的友元会更好吗?

(nb4"经验性!")

让一组类为一个共同的目的而一起工作是合理的,但是您可以考虑另一种选择。

举个简单的例子:

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++,所以不要把它当作建议。

关键是,即使inner正在访问outer的私有成员,也可以编译。

这是你要求的另一种方式