Cambio de tipo de tiempo de ejecución C ++ (evitando el cambio)

He estado en C ++ durante algunos años, pero aún no he encontrado la solución a un problema que tengo constantemente. Saber cómo resolverlo sería increíble.

Lo que tengo en este momento es:

// 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 */

Me gustaría eliminar el interruptor por muchas razones. En lugar de eso, necesitaría algo como:processData<runtime-decltype(currentEnumValue)>(data);

Sé sobre typeid y sobre no mezclar el tiempo de compilación y el tiempo de ejecución juntos ... pero a pesar de esto, me gustaría encontrar alguna solución de todos modos, preferiblemente excluyendo las macros.

Respuestas a la pregunta(3)

Su respuesta a la pregunta