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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-01 10:17:30453ブラウズ

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

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

指定されたファンクター クラス 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 サイトの他の関連記事を参照してください。

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