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

Mary-Kate Olsen
リリース: 2024-11-01 10:17:30
オリジナル
452 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!