私は可変長テンプレート関数foo()
を持っている:C++パラメータパックをstd :: pairオブジェクトのシーケンスにマップするにはどうすればよいですか?
template <typename... Args>
void foo(Args &&... args);
この関数はsize_t
のすべての引数で呼び出されることを意図しています。私はsome metaprogrammingを使って強制することができます。結果のリストを一度に2つずつ取り出して、std::pair<size_t, size_t>
のコンテナに入れておく必要があります。概念的には、のようなもの:
std::vector<std::pair<size_t, size_t> > = {
std::make_pair(args[0], args[1]),
std::make_pair(args[2], args[3]), ...
};
は、これを行うための簡単な方法はありますか?私はパックの拡張によって、引数をフラットコンテナに入れることができることを知っていますが、同時に2つずつ2つずつグループ化する方法がありますか?
"*これは簡単な方法ですか?*"いいえ。 –
2つの引数を消費する再帰型挿入子を作成し、2つのストップケース特殊化を使用してベクトルとしてペアにpush_backすることができます。 – luk32
追加の 'std :: index_sequence'パラメータを持つ内部ヘルパー関数に転送する可能性はありますか? –