Переключение типов среды выполнения C ++ (избегая переключения)

Я был в C ++ в течение нескольких лет, но я еще не нашел решение проблемы, с которой я постоянно сталкиваюсь. Знать, как решить это было бы здорово.

Что у меня на данный момент есть:

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

Я хотел бы удалить переключатель по многим причинам. Вместо этого мне нужно что-то вроде:processData<runtime-decltype(currentEnumValue)>(data);

Я знаю о typeid и о том, что нельзя смешивать время компиляции и время выполнения ... но, несмотря на это, я все равно хотел бы найти какое-то решение, предпочтительно исключая макросы.

Ответы на вопрос(3)

Ваш ответ на вопрос