Get function arity from template parameter

后端 未结 1 444
清歌不尽
清歌不尽 2020-12-10 04:53

How can I get the arity of an arbitrary function type used as a template parameter?

The function can be a normal function, a lambda or a functor. Example:

         


        
相关标签:
1条回答
  • 2020-12-10 05:05

    Assuming that all the operator()'s and functions we're talking about are not templates or overloaded:

    template <typename T>
    struct get_arity : get_arity<decltype(&T::operator())> {};
    template <typename R, typename... Args>
    struct get_arity<R(*)(Args...)> : std::integral_constant<unsigned, sizeof...(Args)> {};
    // Possibly add specialization for variadic functions
    // Member functions:
    template <typename R, typename C, typename... Args>
    struct get_arity<R(C::*)(Args...)> :
        std::integral_constant<unsigned, sizeof...(Args)> {};
    template <typename R, typename C, typename... Args>
    struct get_arity<R(C::*)(Args...) const> :
        std::integral_constant<unsigned, sizeof...(Args)> {};
    
    // Add all combinations of variadic/non-variadic, cv-qualifiers and ref-qualifiers
    

    Demo.

    0 讨论(0)
提交回复
热议问题