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++,所以不要把它当作建议。
关键是即使内部正在访问外部的私有成员,这也会编译。
这是完成您所要求的另一种方法。
我构建了一个基于 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++,所以不要把它当作建议。
关键是即使内部正在访问外部的私有成员,这也会编译。
这是完成您所要求的另一种方法。