मैं ऐसी समस्या को हल करने का प्रयास कर रहा हूं जो अनाम कार्य बहुत अधिक आसान बनाता है, और यह सोच रहा था कि यह सी ++ में संभव था या नहीं।बढ़ावा देने के साथ सी ++ अज्ञात कार्यों के लिए संभव है?
मैं करना चाहते हैं क्या (अनिवार्य)
template<typename T>
T DoSomething(T one, function<T(T)> dosomething)
{
return one + dosomething(5);
}
void GetMyVal(...)
{
DoSomething<int>(1, /*anonymous func here*/)
}
इस उदाहरण बहुत, बहुत मैं क्या करना है के लिए सरल है है। सी # में मैं पी => पी * 5 करूँगा। मुझे पता है कि यह सी ++ 0x के साथ आसान है, लेकिन मैं इसका उपयोग नहीं कर सकता। मुझे लगता है कि मुझे इसे बढ़ावा देने में सक्षम होना चाहिए :: लैम्ब्डा, या बूस्ट :: बाइंड और बूस्ट :: प्लेसहोल्डर्स के साथ फ़ंक्शन का संयोजन, लेकिन मुझे इसे काम करने के लिए प्रतीत नहीं होता है। यह संभव नहीं हो सकता है और यह भी ठीक है, लेकिन अगर यह संभव नहीं है तो कृपया उत्तर दें। धन्यवाद।
संपादित करें: ठीक है, ऐसा लगता है कि एक int काम का सरल मामला ठीक है, एक और जटिल संरचना के बारे में क्या? तो, की सुविधा देता है की कोशिश
struct NumHolder
{
int x;
}
template<typename T>
T DoSomething(T one, function<T(NumHolder)> dosomething)
{
NumHolder temp;
temp = 5
return one + dosomething(temp);
}
void GetMyVal(...)
{
DoSomething<int>(1, /*anonymous func here*/)
}
यहाँ मेरी सी # अभिव्यक्ति होगा पी की तर्ज पर => p.temp * 5. इस बढ़ावा साथ C++ में ऐसा करना संभव है?
संपादित करें 2: ठीक है, अब मैं सिर्फ उत्सुक हूं: डी मैं लैम्ब्डा अभिव्यक्ति के भीतर एक फ़ंक्शन कैसे कॉल करूं? इसलिए, अगर हमारे पास
int ChangeVal(int mult)
{
return mult*5;
}
struct NumHolder
{
int x;
}
template<typename T>
T DoSomething(T one, function<T(NumHolder)> dosomething)
{
NumHolder temp;
temp = 5
return one + dosomething(temp);
}
void GetMyVal(...)
{
DoSomething<int>(1, /*anonymous func here*/)
}
सी # में मैं पी => चेंजवेल (पी) कह सकता हूं। सी ++ लैम्ब्डा अभिव्यक्तियों के साथ सिंटैक्स क्या होगा?
क्या "ज्यादा, बहुत आसान" मज़दूर घोषित करने की 5 लाइनों को बचा रहा है? – ima
@ima: यह वास्तव में, वास्तव में सरल संस्करण है जो मुझे करने की ज़रूरत है। अन्यथा मेरे पास दर्जन मज़ेदार हैं। इस मामले में यह बहुत आसान है, मुझे सिंटैक्स नहीं पता था – Steve
यह वाक्यविन्यास नहीं है, यह सी ++ के शीर्ष पर कस्टम व्याकरण को लागू करने का प्रयास कर रहा है। यह संभव है, लेकिन मैं स्थिति की कल्पना करने के लिए संघर्ष करता हूं जहां कोड की कुछ पंक्तियों को सहेजना इस तरह के मूल्य के लायक है। एक साल या दो साल बाद अपने कोड को बनाए रखने वाले कुछ गरीब व्यक्ति को करुणा करें ... – ima