首页 >后端开发 >C++ >如何访问可变参数模板类中函数指针的参数类型?

如何访问可变参数模板类中函数指针的参数类型?

Barbara Streisand
Barbara Streisand原创
2024-11-01 05:29:27663浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn