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.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage