タプルを可変引数テンプレート関数の引数に展開する
C 17 以降では、std::apply 関数が提供します。この問題に対する直接的な解決策。これは呼び出し可能なオブジェクトとタプルを引数として受け取り、基本的にタプルを関数の個々の引数に展開します。
#include <tuple> template<typename Tret, typename... T> Tret func(const T&... t); int main() { std::tuple<int, float> my_tuple; auto result = std::apply(func<int, int, float>, my_tuple); return 0; }
Clang バージョン 3.9 以降では、std::experimental::apply同様の機能に使用できます。
処理テンプレート関数引数
テンプレート関数が可変引数のテンプレート引数を取る場合は、次の回避策を採用できます。
#include <tuple> template<typename T> void my_func(T&& t) {} int main() { std::tuple<int, float> my_tuple; std::apply([](auto&&... args) { my_func(args...); }, my_tuple); return 0; }
このアプローチにより、型安全性は若干低くなりますが、テンプレート関数はタプル引数を受け入れることができます。 。より一般的で堅牢なソリューションについては、次のリソースを参照してください: https://blog.tartanllama.xyz/passing-overload-sets/.
以上がC でタプルを可変引数テンプレート関数の引数に拡張するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。