给定一个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表达式作为参数的函数模板中使用lambda_traits
,并且我需要在函数内部知道它的参数类型和返回类型:
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
对象(如上所示)。