0

假设我需要实现一个具有以下签名的函数:

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_infos 的静态映射?

笔记:

  • 我可以要求额外的元数据。
  • 我可以更改签名
  • 我在编译时无法获得任何其他信息。
4

0 回答 0