Diberikan lambda, apakah mungkin untuk mengetahui tipe parameter dan tipe kembaliannya? Jika ya, bagaimana caranya?
Pada dasarnya, saya ingin lambda_traits
yang dapat digunakan dengan cara berikut:
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
Motivasi di baliknya adalah saya ingin menggunakan lambda_traits
template fungsi yang menerima lambda sebagai argumen, dan saya perlu mengetahui jenis parameternya dan jenis kembalian di dalam fungsi:
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!
//...
}
Untuk saat ini, kita dapat berasumsi bahwa lambda membutuhkan satu argumen.
Awalnya, saya mencoba bekerja dengan std::function
sebagai:
template<typename T>
A<T> f(std::function<bool(T)> fun)
{
return A<T>(fun);
}
f([](int){return true;}); //error
Namun hal itu jelas akan memberikan error. Jadi saya mengubahnya ke TLambda
versi template fungsi dan ingin membangun std::function
objek di dalam fungsi (seperti yang ditunjukkan di atas).