假设我需要实现一个具有以下签名的函数:
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
s 的静态映射?
笔记:
- 我可以要求额外的元数据。
- 我可以更改签名
- 我在编译时无法获得任何其他信息。