這裏被簡化我的應用程序的設置:枚舉值相關的函數調用
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()調用中,狀態不是一個常量表達式,這是一個問題。有沒有辦法寫這個枚舉相關的函數調用沒有一些大的醜陋的開關?
(這只是一個功能只有2個狀態的簡單示例)。
您的步驟模板本質上是一個編譯時構造,而run()選擇本質上是一個運行時構造。你不能混合兩者。您可以應用一些元編程來枚舉編譯時所有可能的狀態並生成一些運行時交換機。或者你可以使用其中一個像Boost MSM那樣的庫。 –
[本文](https://kfrlib.com/blog/how-c14-and-c17-help-to-write-faster-and-better-code-real-world-examples/)提到了一個'cswitch'可以有效地用於這個模板。 – zett42