मैं हाल ही में इंटरनेट पर लैम्ब्डा अभिव्यक्तियों के बारे में कुछ पढ़ रहा हूं और ऐसा लगता है कि सी ++ 0x के लैम्ब्डा अभिव्यक्तियों में एक प्रकार (या प्रकार) नहीं होगा जो विशेष रूप से लैम्ब्डा अभिव्यक्तियों से बंधेगा - दूसरे शब्दों में , लैम्ब्डा एक्सप्रेशन केवल टेम्पलेट तर्क या auto
तर्क/चर से मेल खाते हैं। क्या, here वर्णित है, ऐसा होता है किक्या यह बुरा है कि C++ 0x के लैम्ब्डा अभिव्यक्तियों का नाम नहीं है?
संकलनकर्ता कि lambdas समर्थन प्रत्येक लैम्ब्डा अभिव्यक्ति
मेरा प्रश्न है के लिए एक अनूठा गुमनाम functor प्रकार बनाएगा है, यह है कि एक बुरी बात? क्या यह कुछ ऐसा कीवर्ड नहीं समझ पाएगा जो केवल लैम्ब्डा अभिव्यक्तियों से मेल खाता हो, उदा। lambda
है, जो इस प्रकार
void f(std::function<int(int)> func)
{
func(2);
}
template<typename T>
void g(T func)
{
func(2);
}
void h(lambda func)
{
func(2);
}
int main()
{
int fpointer(int);
struct { int operator()(int var) { return var; } } functor;
f(fpointer); //ok (actually a linker error, but for the sake of example)
f(functor); //ok
f([](int var) { return var; }); //ok
g(fpointer); //ok
g(functor); //ok
g([](int var) { return var; }); //ok
h(fpointer); //error -- function pointer isn't a lambda expr
h(functor); //error -- functor isn't a lambda expr
h([](int var) { return var; }); //ok
return 0;
}
ईमानदारी से कहूं तो काम करेगा, मैं वास्तव में इस की उपयोगिता (विशेष रूप से यह देखते हुए कि auto
लैम्ब्डा भाव को स्वीकार करता है, इसलिए एक तो एक चर करने के लिए एक लैम्ब्डा आवंटित कर सकते हैं) को देख सकते हैं, लेकिन यह अभी भी मेरे साथ सही नहीं बैठता है कि लैम्ब्डा अभिव्यक्ति अज्ञात प्रकार हैं और विशेष रूप से केवल एक विशेष प्रकार (अन्य सभी के बहिष्कार के लिए) तक सीमित नहीं हो सकती हैं।
संक्षेप में, मेरा सवाल यह है कि, यह ठीक है कि लैम्ब्डा अभिव्यक्ति अज्ञात हैं (उपयोगिता के मामले में दोनों - lambda
प्रकार की कमी हमें कुछ कार्यक्षमता से रहित करती है - और दार्शनिक रूप से - क्या यह वास्तव में समझ में आता है लैम्बडा अभिव्यक्तियों में हमेशा 'टाइप' auto
है)?
यह थोड़ा सा लगता है जैसे आप जानते हैं कि आप 'std :: function 'का उपयोग करके लैम्ब्डा अभिव्यक्ति स्वीकार कर सकते हैं। –
मैं था, हालांकि सामान्य कार्यक्षमता मेल खाता है कि कैसे 'ऑटो' काम करता है (afaik), मैंने सोचा कि यह * कार्यों * फ़ंक्शन कॉल का एक और * सेट जोड़ने के लिए अनावश्यक है (लेकिन यह उल्लेख करने के लिए अभी भी अच्छा है, इसलिए धन्यवाद litb) – GRB
मुझे लगता है ऑटो के बारे में एक गलतफहमी है। एक फ़ंक्शन में पैरामीटर प्रकार के रूप में ऑटो का उपयोग नहीं किया जा सकता है। यह एक प्रकार नहीं है। ऑटो बस कहता है "प्रारंभकर्ता से प्रकार को कम करें क्योंकि मैं बहुत आलसी हूं या बस नाम का नाम देने में असमर्थ हूं"। – sellibitze