首頁 > 後端開發 > C++ > 主體

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

Linda Hamilton
發布: 2024-10-31 02:49:01
原創
465 人瀏覽過

How to Retrieve Argument Types of Function Pointers in Variadic Template Classes?

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

泛型函子是有用的類,它提供了一種便捷的方法來處理具有不同參數列表的函數。然而,存取這些類別中函數指標的參數類型可能是一個挑戰。

解決方案

考慮以下函子類:

<code class="cpp">template <typename... ARGS>
class Foo {
    std::function<void(ARGS...)> m_f;
public:
    Foo(std::function<void(ARGS...)> f) : m_f(f) {}
    void operator()(ARGS... args) const { m_f(args...); }
};</code>
登入後複製

雖然您可以輕鬆訪問operator()方法中的args...使用了遞歸“剝離”函數,在建構函數中取得參數類型更加複雜。

為了解決這個問題,可以實作一個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>
登入後複製

透過此類,您可以確定函數指標的參數類型、傳回類型和參數數量。

測試程式碼

以下程式碼示範了功能:

<code class="cpp">struct R {};
struct A {};
struct B {};

void main() {
    typedef std::function<R(A, B)> fun;

    cout << std::is_same<R, function_traits<fun>::result_type>::value << endl;
    cout << std::is_same<A, function_traits<fun>::arg<0>::type>::value << endl;
    cout << std::is_same<B, function_traits<fun>::arg<1>::type>::value << endl;
}</code>
登入後複製

以上是如何檢索可變參數模板類別中函數指標的參數類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!