可変長引数テンプレート クラスの関数ポインターの引数の型を取得する
前号では、関数を処理するために汎用ファンクター クラスを作成しました任意の引数リストを使用します。現在の問題には、このクラスのコンストラクター内の関数ポインターの引数の型へのアクセスが含まれます。
この問題に対処するには、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>
このクラスは次の機能を提供します:
例:
<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 サイトの他の関連記事を参照してください。