有没有办法匹配C++中的字符串集?

Tyl*_*eau 2 c++

编辑:

我知道如果它是一个很容易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)

Die*_*gio 9

最好的方法是始终使用枚举.但是如果你必须坚持使用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)

  • 我把它放在一个单独的`is_state_valid`函数中,所以它可以在任何地方统一使用 (2认同)