Boost.Fusion динамический переключатель

Я читаю тип объекта из файла:

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

В зависимости от индекса типа, я хочу создать тип (из списка возможных типов) и сделать с ним что-то общее (один и тот же универсальный код для каждого типа):

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

То есть:

У меня один и тот же общий код для разных типов,Я хочу, чтобы компилятор генерировал определенный код для каждого типа,Я знаю только, какой тип мне нужен во время выполнения, иЯ хочу выполнить код только для этого единственного типа.

Это похоже наswitch оператор с условием времени выполнения, но в котором «случаи» генерируются во время компиляции. В частности, это не похоже наfor_each утверждение вообще (я ничего не делаю для всех элементов вектора, кортежа, списка, но только для одного элемента).

Есть ли лучший способ выразить / написать эту идиому? (Например, использоватьmpl::vector вместоstd::tuple для возможных типов используйте что-то отличное отfor_each алгоритм,...)

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

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