ホームページ  >  記事  >  バックエンド開発  >  可変引数テンプレートクラスの関数ポインターの引数の型を取得するにはどうすればよいですか?

可変引数テンプレートクラスの関数ポインターの引数の型を取得するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-31 08:19:30897ブラウズ

 How to Retrieve Argument Types of a Function Pointer in a Variadic Template Class?

可変長引数テンプレート クラスの関数ポインターの引数の型を取得する

前号では、関数を処理するために汎用ファンクター クラスを作成しました任意の引数リストを使用します。現在の問題には、このクラスのコンストラクター内の関数ポインターの引数の型へのアクセスが含まれます。

この問題に対処するには、function_traits クラス テンプレートを利用できます。

<code class="cpp">template<typename T>
struct function_traits;

template<typename R, typename ...Args>
struct function_traits<std::function<R(Args...)>>
{
    static const size_t nargs = sizeof...(Args);

    typedef R result_type;

    template <size_t i>
    struct arg
    {
        typedef typename std::tuple_element<i, std::tuple<Args...>>::type type;
    };
};</code>

このクラスは次の機能を提供します:

  • 引数の数の抽出: nargs 定数は、関数によって受け取られる引数の数を表します。
  • 戻り値の型: result_type typedef は戻り値の型を識別します。
  • 個々の引数の型の決定: arg テンプレート構造体は各引数の特定の型を提供します。

例:

<code class="cpp">struct R{};
struct A{};
struct B{};

typedef std::function<R(A,B)> fun;

std::cout << std::is_same<R, function_traits<fun>::result_type>::value << std::endl;
std::cout << std::is_same<A, function_traits<fun>::arg<0>::type>::value << std::endl;
std::cout << std::is_same<B, function_traits<fun>::arg<1>::type>::value << std::endl;</code>

出力:

1
1
1

この例では、function_traits を利用して可変個引数テンプレート クラスのコンストラクター内の引数の型を取得する方法を示します。

以上が可変引数テンプレートクラスの関数ポインターの引数の型を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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