我在另一种编程语言中使用过它,它非常有用。
对于 C++,我找不到任何关于此的信息。
让我们以下面的代码为例:
void change();
enum
{
end = 0,
gmx
}
int
gExitType;
int main()
{
gExitType = end;
SetTimer(&change, 10000, 0);
return 0;
}
void ApplicationExit()
{
switch (gExitType)
{
case end:
printf("This application was ended by the server");
case gmx:
printf("This application was ended by the timer");
}
::exit(0);
}
void change()
{
gExitType = gmx;
ApplicationExit();
}
这就是我们在 C++ 中的做法,但是当使用状态机/自动机时,我可以用另一种语言做这样的事情:
void change();
int main()
{
state exitType:end;
SetTimer(&change, 10000, 0);
return 0;
}
void ApplicationExit() <exitType:end>
{
printf("This application was ended by the server");
}
void ApplicationExit() <exitType:gmx>
{
printf("This application ended by the timer");
}
void change()
{
state exitType:gmx;
ApplicationExit();
}
在我看来,这是实现目标的一种非常优雅的方式。我将如何在 C++ 中做到这一点?这段代码似乎不起作用(显然因为我找不到任何与 C++ 相关的自动机)
为了澄清我的观点:
那么使用这种技术有什么好处呢?好吧,您可以清楚地看到代码更小;授予我在第一个版本中添加了一个枚举以使示例更相似,但 ApplicationExit 函数肯定更小。它也更加明确 - 您不需要函数中的大型 switch 语句来确定发生了什么,如果您愿意,您可以将不同的 ApplicationExits 放在不同的文件中以独立处理不同的代码集。它还使用较少的全局变量。