编辑:
我知道如果它是一个很容易enum,但我不能enum在这个特殊场合使用它.我实际上需要一个字符串来进一步处理.
例如,我有四个状态字符串:
IDLE, STARTED, STOPPED, PAUSED
Run Code Online (Sandbox Code Playgroud)
和一个吸收这些状态之一的函数:
setState(const std::string &state);
Run Code Online (Sandbox Code Playgroud)
是否有一种快速的方法来验证输入状态是四个字符串之一,而不使用if像这样的巨大语句:
if (state == "IDLE" || state == "STARTED" || state == "STOPPED" || state == "PAUSED") {
// use code
}
Run Code Online (Sandbox Code Playgroud)
最好的方法是始终使用枚举.但是如果你必须坚持使用std :: string,那么我会推荐这样的东西:
#include <unordered_set>
static void setState(const std::string &state)
{
static std::unordered_set<std::string> states {{ "IDLE", "STARTED", "STOPPED", "PAUSED" }};
if (states.find(state) == states.end())
throw std::invalid_argument("Invalid state");
// Continue...
}
Run Code Online (Sandbox Code Playgroud)