Jeżeli chcesz używać typu std::string w instrukcji switch, to możesz obejść istniejące ograniczenia, ale kosztem dodatkowego kodu, który dokona konwersji stringa na typ wyliczeniowy.
[C++14]
#include <iostream>
#include <map>
using namespace std;
struct Resolve{} resolve;
enum class option { invalid, one, two };
const map<string,option> connect { {"one",option::one}, {"two",option::two} };
option operator|( Resolve , const string& text )
{
return connect.find(text) != cend(connect) ? connect.at(text) : option::invalid;
}
int main()
{
string text;
cin >> text;
switch( resolve|text )
{
case option::one:
cout << "option is one";
break;
case option::two:
cout << "option is two";
break;
default:
cout << "No such option";
break;
}
}
https://wandbox.org/permlink/CoXXHtmsPWbQVEXl