タプル(または同等の異種コンテナ)内のデータをインクリメンタルに収集する、つまりタプルに別の値(およびタイプ)を段階的に追加したいとします。これらの線に沿ってタプルをインクリメンタルに増やす
何かが(名前と構文が作られています)。
growable_tuple tup;
tup.push_back(42);
//...
tup.push_back("Hello");
//...
tup.push_back(' ');
//...
tup.push_back("World"s);
static_assert(4 == std::tuple_size<tup::type>::value); // or
assert(4 == tup.size());
私はstd::tuple_cat
を使用することができますが、私は、そのような各cat
のために別のローカル変数にコピーして、結果を格納する必要があります。
std::any
は含まれているタイプがわからないので使用できません。 含まれるタイプのany
を抽出する方法はありますか?
単一このような「挿入」をサポートするローカル変数は、コピーしないことができますか?
ハナにはこのような施設がありますか?
基本的には、後でアクセスできるように型を消去しない異種のコンテナが必要です。
また、挿入がランタイムに依存しない(ランタイムループを挿入しない)と仮定することもできます。
具体的には、タプルに追加されたすべての型(およびインデックス)を指し示すコードを手作業で調べ、これを使用して初期タプルを定義できます。すべてのデータはコンパイル時に存在します。
事前にタプルタイプを手動で指定しなければ、これを行う方法がないのだろうかと思います。
これを実行する明白な方法の1つは、データを徐々にシリアル化して(例:jsonに)、後で再解析することですが、これはやや丸見えです。
予想されるタイプのセットがあらかじめわかっている場合は、 'std :: variant'オブジェクトのコンテナを使用できます。 – Leon
いくつかの擬似コードで何をしたいのか説明できますか? –
@ Reon:いいえ、タプルが必要です。タイプをあらかじめ知っていません。私は例を追加します。 –