C ++ Runtime Type Switching (Vermeiden von Switches)

Ich bin seit einigen Jahren mit C ++ beschäftigt, habe aber noch keine Lösung für ein Problem gefunden, das ich ständig habe. Wissen, wie man es löst, wäre fantastisch.

as ich im Moment habe ist:

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

Ich möchte den Schalter aus vielen Gründen entfernen. Stattdessen würde ich so etwas brauchen:processData<runtime-decltype(currentEnumValue)>(data);

Ich kenne mich mit typeid aus und weiß nicht, wie man Kompilierzeit und Laufzeit zusammenmischt ... aber trotzdem würde ich gerne eine Lösung finden, vorzugsweise ohne Makros.