Boost.Fusion Laufzeitschalter

Ich lese den Typ eines Objekts aus einer Datei:

enum class type_index { ... };
type_index typeidx = read(file_handle, type_index{});

Abhängig vom Typindex möchte ich einen Typ (aus einer Liste möglicher Typen) erstellen und etwas generisches damit tun (für jeden Typ den gleichen generischen Code):

std::tuple<type1, type2, ..., typeN> possible_types;

boost::fusion::for_each(possible_types, [&](auto i) {
  if (i::typeidx != typeidx) { return; }
  // do generic stuff with i
});

Das ist

Ich habe den gleichen generischen Code für verschiedene Typen,Ich möchte, dass der Compiler spezifischen Code für jeden Typ generiert.Ich weiß nur, welchen Typ ich zur Laufzeit brauche, undIch möchte den Code nur für diesen einen Typ ausführen.

Das fühlt sich an wie einswitch -Anweisung mit einer Laufzeitbedingung, bei der die "Fälle" zur Kompilierungszeit generiert werden. Insbesondere fühlt sich dies nicht wie einfor_each Anweisung überhaupt (ich mache nichts für alle Elemente in einem Vektor, Tupel, Liste, sondern nur für ein einzelnes Element).

Gibt es eine klarere Möglichkeit, diese Redewendung auszudrücken / zu schreiben? (Verwenden Sie z. B. einmpl::vector anstelle einerstd::tuple Verwenden Sie für die möglichen Typen etwas anderes als dasfor_each Algorithmus, ...)

Antworten auf die Frage(5)

Ihre Antwort auf die Frage