olmalıdır. Deney kodu
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
bu bakınız:
: Aynı şekilde
Online demo
siz bu işe daha fazla özellik koyabilir, Ama bunu kendiniz uygulayabilir
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;
};
};
Şimdi sıra, const dizini kullanarak, her argüman türü alabilirsiniz:
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
Bu tipteki parçalanmış-adını yazdıran!
İlk başta bunu yapmak istediğiniz belirli bir neden var mı? – Invictus