这里被简化我的应用程序的设置:枚举值相关的函数调用
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