Предположим, мне нужно реализовать функцию со следующей сигнатурой:
void print_elements(void* buffer, const std::string& element_type_name, size_t len, std::ostream& os);
Который должен распечатать / потоковое len
элементы buffer
выводить поток os
, Если бы у меня был тип во время компиляции, то, очевидно, я бы просто
for(const auto& e : buffer) { os << e << " "; }
но я получаю буферы откуда-то еще, только строка указывает их тип.
Очевидно, я не могу сделать
const size_t element_size = size_by_type_name(element_type_name);
for(it = buffer; it < (buffer + len * element_size); it++) {
auto& stream_op_wrapper = get_stream_op_wrapper_for(os, element_type_name);
stream_op(os, *it);
}
в C ++. Что мне делать вместо этого? Я знаю, что в C ++ нет отражения, но могу ли я добиться большего успеха, чем искать каждый раз в таблице типов? Или используя статические карты строки вtype_info
с?
Заметки:
Задача ещё не решена.
Других решений пока нет …