どのようにして、variadicテンプレートへのパラメータパックの各パラメータ自体がパラメータパックであることを表現できますか?variadicテンプレートで入れ子になったパラメータパックを取る方法は?
template <typename... TS>
void use_tuple(std::tuple<TS...> arg0);
template <typename... TS0, typename... TS1>
void use_tuple(std::tuple<TS0...> arg0, std::tuple<TS1...> arg1);
私はuse_tuple
はタプルの任意の数を取ることができるようにしたい:
は、このコードを検討してください。今、私はこのようにそれを記述する必要があります。
template <typename... TS0, typename... REST>
void use_tuple(std::tuple<TS0...> arg0, REST... rest);
void use_tuple(); // Terminates the recursion.
しかし、私はこのようにそれを書きたい:
// Each ELEMENT in PACK_OF_PACKS is a parameter pack.
template <(typename...)... PACK_OF_PACKS>
void use_tuple(std::tuple<PACK_OF_PACKS...>... args);
これはさえ可能ですか?もしそうなら、どうですか?そうでない場合は、他に何ができますか?このコードの私の目標は、すべてのタプルに含まれるのタイプになることです。
私の究極の目標は、このようなものです:
template <typename...> void foo();
use_tuple(std::tuple<int, float, char>{},
std::tuple<double, short, std::string>{},
std::tuple<std::function<void()>, std::vector<int>>{});
// Results in a call to
// foo<int, float, char, double, short, std::string,
// std::function<void()>, std::vector<int>>();
しかし、私は渡されたタプルの数や要素の数に依存しない間接の小型、定数数でこれを実装したいですそれぞれにだから再帰はありません。
何use_tuple 'の体は、(のstd ::タプル ...引数)が'のように見えるのでしょうか?それは、言語の一部ではない、 '... ...'拡張を持たなければならないでしょう。 –
Caleth
@Filipp - 'use_tuple、std :: tuple 、std :: tuple 、... 'または' std :: tuple
max66
あなたの質問を編集して、タプルで何をしたいのかを明確にしてください。コンテキストについては、[this](https://stackoverflow.com/questions/47477177/how-to-take-nested-parameter-packs-in-variadic-templates#comment81909794_47477266) –