Uso de cadenas en declaraciones de cambio: ¿dónde nos encontramos con C ++ 17?
Cada uno de nosotros ha tenido (probablemente) el sueño de la infancia de escribir:
switch(my_std_string) {
case "foo": do_stuff(); break;
case "bar": do_other_stuff(); break;
default: just_give_up();
}
pero esto no es posible, como se explica en las respuestas a esta pregunta de los viejos tiempos (2009):
¿Por qué la instrucción switch no se puede aplicar en cadenas?
Desde entonces, hemos visto la llegada de C ++ 11, que nos permite llegar hasta:
switch (my_hash::hash(my_std_string)) {
case "foo"_hash: do_stuff(); break;
case "bar"_hash: do_other_stuff(); break;
default: just_give_up();
}
como se describe en unresponder aTiempo de compilación hashing de cadenas - lo cual no es tan malo, aunque en realidad no hace exactamente lo que queríamos - existe la posibilidad de colisión.
Mi pregunta es: ¿El desarrollo del lenguaje desde entonces (en su mayoría C ++ 14 supongo) ha afectado la forma en que uno escribiría una especie de declaración de caso de cadena? ¿O simplificó las tuercas y tornillos para lograr lo anterior?
Específicamente, con la conclusión de laC ++ 17 estándar siendoa la vuelta de la esquina - Estoy interesado en la respuesta dado lo que podemos asumir que contendrá el estándar.
Nota: Esta no es una discusión sobre el mérito de usar declaraciones de cambio, ni un hilo en meta. Estoy haciendo una pregunta informativa, así que por favor responda / up / downvote basado en eso.