একটি ল্যাম্বদা দেওয়া হয়েছে, এটির পরামিতি টাইপ এবং রিটার্নের ধরণটি বের করা কি সম্ভব? যদি হ্যাঁ, কিভাবে?
মূলত, আমি চাই 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
ভিতরে অবজেক্টটি তৈরি করতে চাই (উপরে দেখানো হয়েছে)।