【发布时间】:2020-04-01 06:04:56
【问题描述】:
我想获取 lambda 的返回类型和参数类型。 Is it possible to figure out the parameter type and return type of a lambda?给出一个解决方案。但它不适用于通用 lambda。
template<typename F>
struct function_traits :public
function_traits<decltype(&F::operator())> {};
template<typename R,typename C,typename... Args>
struct function_traits<R(C::*)(Args...)const>:public
function_traits<R(Args...)>{
constexpr static size_t arity = sizeof...(Args);
};
auto f1 = [](int x) {return x+1; };
Print(function_traits<decltype(f1)>::arity); //return 1
auto f2 = [](auto x) {return x+1; };
Print(function_traits<decltype(f2)>::arity); //error
那么如何解决获取泛型 lambda 的返回类型和参数类型呢?
【问题讨论】:
-
请不要编辑问题以使现有答案无效。相反,请发布一个新问题。
-
两种变体都无法编译,第一种情况导致 lambda 对象被强制转换为函数指针
标签: c++ c++11 c++14 c++17 generic-lambda