एक मेमने को देखते हुए, क्या यह पता लगाना संभव है कि यह पैरामीटर प्रकार और रिटर्न प्रकार है? यदि हाँ, तो कैसे?
मूल रूप से, मैं चाहता हूं कि 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फ़ंक्शन के अंदर ऑब्जेक्ट का निर्माण करना चाहता हूं (जैसा कि ऊपर दिखाया गया है)।