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++ にはリフレクションがないことはわかっていますが、型のテーブルを毎回検索するよりもうまくできるでしょうか? または、string-to- type_infos の静的マップを使用しますか?

ノート:

  • 追加のメタデータを要求できます。
  • 署名を変更できます
  • コンパイル時に追加情報を取得できません。
4

0 に答える 0