「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 可変引数テンプレート クラス内の関数ポインターの引数の型にアクセスするにはどうすればよいですか?

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

2024 年 11 月 21 日に公開
ブラウズ:384

How can I access the argument types of a function pointer within a variadic template class?

可変個引数テンプレート クラスの関数ポインター引数の型にアクセスする

この問題は、任意の引数を持つ関数のジェネリック ファンクターの作成に関する以前のクエリから発生します。リスト。指定されたファンクター クラス Foo を使用すると、任意の数の引数を使用して関数ポインターを呼び出すことができます。ただし、ここでの作業は、Foo コンストラクター内の関数ポインターから引数の型を抽出することです。

Foo クラスを定義する際、引数の型はコンストラクターの関数ポインター宣言で ARGS... としてカプセル化されます。引数の値は構築時には利用できませんが、その型は関数ポインター自体内でアクセスできます。

これらの引数の型を明らかにするには、function_traits クラスを利用できます:

template 
struct function_traits;  

template>
{
    // Number of arguments
    static const size_t nargs = sizeof...(Args);

    // Return type
    typedef R result_type;

    // Argument types at specified index
    template <size_t i>
    struct arg
    {
        typedef typename std::tuple_element<i, std::tuple<Args...>>::type type;
    };
};

Foo コンストラクター内では、次のように function_traits を使用してこれらの引数の型にアクセスできます。

template

function_traits を採用することにより、引数の型を抽出して Foo クラス内で利用することができ、関数のシグネチャに基づいた高度な操作が可能になります。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3