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

Mary-Kate Olsen
リリース: 2024-10-31 08:19:30
オリジナル
895 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート