は自分のアプリケーションのセットアップを簡素化されます。列挙値に依存する関数呼び出し
class Engine {
void run(); { // main program loop
while (state != gameState::quit)
step<state>(); // ERROR
}
template<gameState>
void step() {} // empty default step function
template<>
void step<gameState::intro>() { /* do step for intro state*/ }
template<>
void step<gameState::menu>() { /* do step for menu state*/ }
gameState state;
}
は、私は何をしたい状態のメンバーの現在の値に依存ステップ関数を呼び出しています。 step()呼び出しでは、状態は定数式ではなく、問題になります。いくつかの大きな醜いスイッチなしでこの列挙型の関数呼び出しを書く方法はありますか?
(これは1つの機能と2つの状態のみの簡略化された例です)。
ステップテンプレートは本質的にコンパイル時の構造体であり、run()選択は本質的にランタイム構造体です。あなたは2つを混ぜ合わせることはできません。いくつかのメタプログラミングを適用して、コンパイル時にすべての可能な状態を列挙し、ランタイムスイッチボードを生成することができます。あるいは、Boost MSMのような既存のライブラリを使用することもできます。 –
[この記事](https://kfrlib.com/blog/how-c14-and-c17-help-to-write-faster-and-better-code-real-world-examples/)には、「cswitch」そのために適切に使用することができるテンプレート。 – zett42