Использование строк в выражениях switch - где мы находимся с C ++ 17?
У каждого из нас (возможно) была детская мечта написать:
switch(my_std_string) {
case "foo": do_stuff(); break;
case "bar": do_other_stuff(); break;
default: just_give_up();
}
но это невозможно, как объясняется в ответах на этот вопрос из древних дней (2009):
Почему оператор switch нельзя применять к строкам?
С тех пор мы увидели появление C ++ 11, который позволяет нам идти дальше:
switch (my_hash::hash(my_std_string)) {
case "foo"_hash: do_stuff(); break;
case "bar"_hash: do_other_stuff(); break;
default: just_give_up();
}
как описано вответ вХэширование строки времени компиляции - что не так уж и плохо, хотя на самом деле это не совсем то, что мы хотели - есть вероятность столкновения.
Мой вопрос: повлияло ли развитие языка с тех пор (в основном C ++ 14, я полагаю) на способ, которым можно было бы написать некий строковый регистр? Или упростить гайки и болты для достижения вышеизложенного?
В частности, с заключениемСтандарт C ++ 17 являющийсяпрямо за углом - Мне интересен ответ, учитывая, что мы можем предположить, что стандарт будет содержать.
Замечания: Это не обсуждение достоинств использования операторов switch, ни темы о meta. Я задаю информативный вопрос, поэтому, пожалуйста, ответьте / вверх / вниз на основе этого.