람다가 주어지면 매개 변수 유형과 반환 유형을 알아낼 수 있습니까? 그렇다면 어떻게?
기본적으로 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
는 람다를 인수로 받아들이는 함수 템플릿에서 사용하고 싶습니다 . 함수 내의 매개 변수 유형과 반환 유형을 알아야합니다.
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!
//...
}
당분간 우리는 람다는 정확히 하나의 주장을 취한다고 가정 할 수 있습니다.
처음에는 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
안에 객체 를 구성하려고 합니다 (위 그림 참조).