FSM中的Should状态与上下文类型为友
Should states in an FSM be friends with the context type?
我已经构建了一个基于类的下推自动机有限状态机。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的私有成员,也可以编译。
这是你要求的另一种方式
相关文章:
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如何获取std::result_of函数的返回类型
- MSVC 在不知道类型的情况下评估上下文(和错误)
- Boost.Hana:在 constexpr 上下文中将值元组转换为相应类型的元组
- HTTP POST 请求不允许我定义上下文类型
- 查找上下文RPC_NS_HANDLE未知类型名称
- 为什么在此上下文中非类型模板参数不能是自动的
- 如何在未评估的上下文中将成员函数的结果类型应用于类成员
- 超载功能没有上下文类型信息
- 如何在不同的上下文(例如线程)中保留原始异常类型信息
- 没有上下文类型信息的重载函数 |无法根据转换为类型 'int' 解析重载函数'swap'
- 类声明错误:上下文信息不足,无法确定类型
- FSM中的Should状态与上下文类型为友
- 使用模板化的变量类型执行特定于上下文的操作
- 上下文信息不足,无法确定类型