首頁  >  文章  >  後端開發  >  如何檢索可變參數模板類別中函數指標的參數類型?

如何檢索可變參數模板類別中函數指標的參數類型?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-31 08:19:30839瀏覽

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

在可變參數模板類中檢索函數指針的參數類型

在上一期中,創建了一個泛型函子類來處理函數具有任意參數列表。目前的問題涉及存取此類建構函數中函數指標的參數類型。

要解決此問題,您可以使用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>

此類提供以下功能:

  • 提取參數數量: nargs 常數表示函數所採用的參數數量。
  • 建立回傳類型: result_type typedef 識別回傳類型。
  • 決定單一參數類型: arg 範本結構提供每個參數的特定類型。

例如:

<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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn