存取可變參數範本類別中的函數指標參數類型
此問題源自於先前有關為具有任意參數的函數建立通用函子的查詢清單。給定的函子類別 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中文網其他相關文章!