给定一个lambda,是否可以弄清楚它的参数类型和返回类型?如果是,怎么办?
基本上,我希望lambda_traits
可以通过以下方式使用它:
auto lambda = [](int i) { return long(i*10); };
lambda_traits<decltype(lambda)>::param_type i; //i should be int
lambda_traits<decltype(lambda)>::return_type l; //l should be long
其背后的动机是,我想lambda_traits
在接受lambda作为参数的函数模板中使用,并且我需要知道函数内部的参数类型和返回类型:
template<typename TLambda>
void f(TLambda lambda)
{
typedef typename lambda_traits<TLambda>::param_type P;
typedef typename lambda_traits<TLambda>::return_type R;
std::function<R(P)> fun = lambda; //I want to do this!
//...
}
就目前而言,我们可以假设lambda正好采用了一个参数。
最初,我尝试与 std::function
:
template<typename T>
A<T> f(std::function<bool(T)> fun)
{
return A<T>(fun);
}
f([](int){return true;}); //error
但这显然会带来错误。所以我将其更改TLambda
为功能模板的版本,并希望构建std::function
内部对象(如上所示)。