Alternância do tipo de tempo de execução C ++ (evitando a opção)

Estive em C ++ por alguns anos, mas ainda não encontrei a solução para um problema que tenho constantemente. Saber como resolver isso seria incrível.

O que tenho no momento é:

// Client code:
switch(currentEnumValue)
    {
    case MyEnum::kValue01:
      processData<MyEnum::kValue01>(data);
      break;
    case MyEnum::kValue02:
      processData<MyEnum::kValue02>(data);
      break;
    default:
      LOG("Invalid command");
      break;
    }

// Declarations

enum class MyEnum {kValue01, kValue02};
class MyClass
{
// code
template <MyEnum> void processData(char*); /* Implemented somewhere else */
}
  template <> void MyClass::processData<MyEnum::kValue01>(char* data); /* Implemented somewhere else */
  MyClass <> void MyClass::processData<MyEnum::kValue02>(char* data); /* Implemented somewhere else */

Gostaria de remover a opção por vários motivos. Em vez disso, precisaria de algo como:processData<runtime-decltype(currentEnumValue)>(data);

Eu sei sobre typeid e sobre não misturar tempo de compilação e tempo de execução juntos ... mas, apesar disso, gostaria de encontrar alguma solução, de preferência excluindo macros.

questionAnswers(3)

yourAnswerToTheQuestion