ホームページ >バックエンド開発 >C++ >C でタプルを可変引数テンプレート関数の引数に拡張するにはどうすればよいですか?

C でタプルを可変引数テンプレート関数の引数に拡張するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-02 19:42:43531ブラウズ

How Can I Expand Tuples into Variadic Template Function Arguments in C  ?

タプルを可変引数テンプレート関数の引数に展開する

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。