टेम्पलेट पैरामीटर के रूप में लैम्ब्डा अभिव्यक्ति का उपयोग कैसे करें? जैसे एक एसडीडी :: सेट शुरू करने के लिए एक तुलना वर्ग के रूप में।टेम्पलेट पैरामीटर के रूप में लैम्ब्डा अभिव्यक्ति का उपयोग कैसे करें?
निम्नलिखित समाधान काम करना चाहिए, क्योंकि लैम्ब्डा अभिव्यक्ति केवल एक अज्ञात संरचना बनाता है, जो टेम्पलेट पैरामीटर के रूप में उपयुक्त होना चाहिए। हालांकि, बहुत सारी त्रुटियां पैदा हुई हैं।
कोड उदाहरण:
struct A {int x; int y;};
std::set <A, [](const A lhs, const A &rhs) ->bool {
return lhs.x < rhs.x;
} > SetOfA;
त्रुटि निर्गम (मैं जी ++ 4.5.1 संकलक और --std = C++ 0x संकलन ध्वज का उपयोग कर रहा):
error: ‘lhs’ cannot appear in a constant-expression
error: ‘.’ cannot appear in a constant-expression
error: ‘rhs’ cannot appear in a constant-expression
error: ‘.’ cannot appear in a constant-expression
At global scope:
error: template argument 2 is invalid
है कि अपेक्षित व्यवहार या जीसीसी में एक बग?
संपादित
के रूप में किसी को, मैं गलत तरीके से के रूप में वे गुमनाम struct वे बात कर रहे हैं की एक उदाहरण लौट लैम्ब्डा भाव उपयोग कर रहा हूँ ने कहा।
हालांकि, उस त्रुटि को ठीक करने से समस्या हल नहीं होती है। मैं निम्नलिखित कोड के लिए lambda-expression in unevaluated context
त्रुटि मिलती है:
struct A {int x; int y;};
typedef decltype ([](const A lhs, const A &rhs) ->bool {
return lhs.x < rhs.x;
}) Comp;
std::set <A, Comp > SetOfA;
मैं इस टैग किया सी ++ 0x के रूप में। यह अधिक उपयुक्त लगता है और बेहतर जवाब मिलना चाहिए। – JoshD
@JoshD क्या इसे अभी भी 'C++' टैग नहीं किया जाना चाहिए? 0x अंततः नया मानक बनने जा रहा है और मैं नहीं चाहता कि भविष्य में लोगों को इस प्रश्न को याद किया जाए क्योंकि वे भूल गए थे कि उचित टैग सी ++ 0x सी ++ नहीं था। (या फिर कुछ सी ++ 0x टैग को किसी बिंदु पर सी ++ में माइग्रेट करने जा रहा है?) – KitsuneYMG