Interruptor de tiempo de ejecución Boost.Fusion

Estoy leyendo el tipo de un objeto de un archivo:

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

Dependiendo del índice de tipo, quiero crear un tipo (de una lista de tipos posibles) y hacer algo genérico con él (el mismo código genérico para cada tipo):

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
});

Es decir:

Tengo el mismo código genérico para diferentes tipos,Quiero que el compilador genere código específico para cada tipo,Solo sé qué tipo necesito en tiempo de ejecución, yQuiero ejecutar el código solo para ese tipo único.

Esto se siente como unswitch declaración con una condición de tiempo de ejecución, pero donde los "casos" se generan en tiempo de compilación. En particular, esto no se siente como unfor_each declaración en absoluto (no estoy haciendo nada para todos los elementos en un vector, tupla, lista, sino solo para un solo elemento).

¿Hay una manera mejor y más clara de expresar / escribir este idioma? (Por ejemplo, use unmpl::vector en vez de unastd::tuple para los tipos posibles, use algo diferente alfor_each algoritmo,...)

Respuestas a la pregunta(5)

Su respuesta a la pregunta