FSM 中的状态应该与上下文类型成为朋友吗?

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

我构建了一个基于 class 的下推自动机有限状态机。上下文class(内部状态被修改的class)有一些方法只有状态应该访问(incrementing/decrementing一些迭代器,pushing/popping状态,设置一个接受状态, ETC)。现在它们是 public,因为不同的州需要访问它们。

制作方法 protected/private 并将状态定义为上下文的朋友会更好吗?

(nb4 "opinion-based!")

将 类 个为共同目的一起工作的朋友组成一个集合可能是合理的,但您可以考虑另一种选择。

举一个非常简短、天真的例子:

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

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

这是完成您所要求的另一种方法。