访问可变参数模板类中的函数指针参数类型
此问题源于先前有关为具有任意参数的函数创建通用函子的查询列表。给定的函子类 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中文网其他相关文章!