可変引数テンプレート クラスで関数の引数の型を取得する
指定されたファンクター クラス Foo は、任意の引数リストを使用して関数を呼び出す手段を提供します。 。ただし、コンストラクター内で引数の型を決定することには課題があります。
これを克服するには、次のように 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>
Foo クラス内で、function_traits を使用できます。引数の型情報を取得するには:
<code class="cpp">class Foo { std::function<void(ARGS...)> m_f; public: using result_type = typename function_traits<decltype(m_f)>::result_type; using arg0_type = typename function_traits<decltype(m_f)>::arg<0>::type; // ... Additional argument types as needed };</code>
このアプローチにより、型システムを活用して、ジェネリックかつタイプセーフな方法で関数の引数の型にアクセスし、操作することができます。
以上が可変引数テンプレート クラスで関数の引数の型を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。