Печать данных с неизвестным типом во время компиляции — могу ли я сделать это без переключателя (name_of_type)?

Предположим, мне нужно реализовать функцию со следующей сигнатурой:

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с?

Заметки:

  • Я могу попросить дополнительные метаданные.
  • Я могу поменять подписи
  • Я не могу получить дополнительную информацию во время компиляции.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]