次のシグネチャを持つ関数を実装する必要があるとします。
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++ にはリフレクションがないことはわかっていますが、型のテーブルを毎回検索するよりもうまくできるでしょうか? または、string-to- type_info
s の静的マップを使用しますか?
ノート:
- 追加のメタデータを要求できます。
- 署名を変更できます
- コンパイル時に追加情報を取得できません。