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.