首頁 > 後端開發 > C++ > 如何存取可變參數模板類別中函數指標的參數類型?

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

Barbara Streisand
發布: 2024-11-01 05:29:27
原創
654 人瀏覽過

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

存取可變參數範本類別中的函數指標參數類型

此問題源自於先前有關為具有任意參數的函數建立通用函子的查詢清單。給定的函子類別 Foo 允許使用任意數量的參數呼叫函數指標。然而,現在的任務是從 Foo 建構函數內的函數指標中提取參數類型。

在定義 Foo 類別時,參數類型在建構子的函式指標宣告中被封裝為 ARGS...。雖然參數的值在建構時不可用,但它們的類型可以在函數指標本身內存取。

要發現這些參數類型,可以利用function_traits 類別:

<code class="cpp">template<typename T> 
struct function_traits;  

template<typename R, typename ...Args> 
struct function_traits<std::function<R(Args...)>>
{
    // 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;
    };
};</code>
登入後複製

內在Foo 建構子中,可以使用function_traits 存取這些參數類型,如下所示:

<code class="cpp">template<typename... ARGS>
class Foo
{
    ...

    Foo(std::function<void(ARGS...)> f) : m_f(f) 
    {
        // Accessing the argument types
        static_assert(function_traits<std::function<void(ARGS...)>::nargs == sizeof...(ARGS), "Incorrect number of arguments");
        ...
    }

    ...
};</code>
登入後複製

透過使用function_traits,可以在Foo 類別中提取並利用參數類型,從而實現基於函數簽章的複雜操作。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板