Interruptor de tempo de execução Boost.Fusion

Estou lendo o tipo de um objeto de um arquivo:

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

Dependendo do índice do tipo, quero criar um tipo (de uma lista de tipos possíveis) e fazer algo genérico com ele (o mesmo 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
});

Isso é:

Eu tenho o mesmo código genérico para tipos diferentes,Eu quero que o compilador gere um código específico para cada tipo,Só sei de que tipo preciso no tempo de execução eQuero executar o código apenas para esse tipo único.

Isso parece umswitch instrução com uma condição de tempo de execução, mas onde os "casos" são gerados em tempo de compilação. Em particular, isso não parece umfor_each declaração (não estou fazendo nada para todos os elementos em um vetor, tupla, lista, mas apenas em um único elemento).

Existe uma maneira melhor e mais clara de expressar / escrever esse idioma? (Por exemplo, use ummpl::vector em vez de umstd::tuple para os tipos possíveis, use algo diferente dofor_each algoritmo,...)

questionAnswers(5)

yourAnswerToTheQuestion