Usando cadeias de caracteres em instruções switch - onde estamos no C ++ 17?
Todos nós (provavelmente) tivemos o sonho de escrever:
switch(my_std_string) {
case "foo": do_stuff(); break;
case "bar": do_other_stuff(); break;
default: just_give_up();
}
mas isso não é possível, como é explicado nas respostas a essa pergunta dos velhos tempos (2009):
Por que a instrução switch não pode ser aplicada em strings?
Desde então, vimos o advento do C ++ 11, que nos permite ir até:
switch (my_hash::hash(my_std_string)) {
case "foo"_hash: do_stuff(); break;
case "bar"_hash: do_other_stuff(); break;
default: just_give_up();
}
conforme descrito em umresponda paraCompilar hash de cadeia de tempo - o que não é tão ruim, embora não faça exatamente o que queríamos - há uma chance de colisão.
Minha pergunta é: O desenvolvimento da linguagem desde então (principalmente C ++ 14, suponho) afetou a maneira como alguém escreveria uma declaração de caso de tipo de string? Ou simplificou as porcas e parafusos para alcançar o que foi dito acima?
Especificamente, com a conclusão doPadrão C ++ 17 servirando a esquina - Estou interessado na resposta, considerando o que podemos assumir que o padrão conterá.
Nota: Esta não é uma discussão sobre o mérito de usar instruções switch, nem um tópico sobre meta. Estou fazendo uma pergunta informativa, então responda / suba / vote com base nisso.