我在另一种编程语言中使用过它,它非常有用。
但是我找不到任何关于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++中实现呢?这段代码似乎不起作用(显然,因为我找不到任何与自动机相关的内容)。
为了澄清我的观点:
那么使用这种技术有什么好处呢?嗯,正如您可以清楚地看到的那样,代码更小;尽管我在第一个版本中添加了一个枚举以使示例更相似,但ApplicationExit函数明显更小。它也更加明确-您不需要在函数中使用大型switch语句来确定发生了什么,如果您想要,可以将不同的ApplicationExits放在不同的文件中以独立处理不同的代码集。它还使用较少的全局变量。