別のプログラミング言語で使用しましたが、非常に便利です。
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 を配置して、さまざまなコード セットを個別に処理できます。また、使用するグローバル変数も少なくなります。