是否有可能获得std::function的参数数量?类似于NumOfArgument<...>::value

例如,NumOfArgument<function<int(int, int)> >::value应该为2。

最佳答案

我认为std::function本身不提供该功能。但是您可以自己实现为:

template<typename T>
struct count_arg;

template<typename R, typename ...Args>
struct count_arg<std::function<R(Args...)>>
{
    static const size_t value = sizeof...(Args);
};

测试代码:
typedef std::function<int(int, int)> fun;
std::cout << count_arg<fun>::value << std::endl; //should print 2

看到这个:Online demo

同样,您可以在其中添加更多功能,例如:
template<typename T>
struct function_traits;     //renamed it!

template<typename R, typename ...Args>
struct function_traits<std::function<R(Args...)>>
{
    static const size_t nargs = sizeof...(Args);

    typedef R result_type;

    template <size_t i>
    struct arg
    {
        typedef typename std::tuple_element<i, std::tuple<Args...>>::type type;
    };
};

现在,您可以使用const index获得每种参数类型,如下所示:
std::cout << typeid(function_traits<fun>::arg<0>::type).name() << std::endl;
std::cout << typeid(function_traits<fun>::arg<1>::type).name() << std::endl;
std::cout << typeid(function_traits<fun>::arg<2>::type).name() << std::endl;

Working demo

它打印类型的错误名称!

关于c++ - 如何获得 `std::function`的参数数量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9044866/

10-11 23:03
查看更多