एप्लिकेशन विकसित करते समय, मुझे निम्न समस्या थी। मैं एक खाली std::list<string>
वापस करना चाहता था जब दिया गया फ़ंक्शन पॉइंटर शून्य था, या अन्यथा उस फ़ंक्शन का परिणाम। यह मेरा कोड का एक सरलीकृत संस्करण है:प्रारंभिकizer_सूची से टर्नरी ऑपरेटर + सी ++ 11 कन्स्ट्रक्टर
typedef std::list<std::string> (*ParamGenerator)();
std::list<std::string> foo() {
/* ... */
ParamGenerator generator = ...;
if(generator)
return generator();
else
return {};
}
हालांकि, मैं आमतौर पर इन मामलों में त्रिगुट (?:
) ऑपरेटर का उपयोग करना चाहते, तो मैं इसे इस तरह का उपयोग कर की कोशिश की (हमेशा की तरह):
return generator ? generator() : {};
लेकिन यह त्रुटि आई:
somefile.cpp:143:46: error: expected primary-expression before ‘{’ token
somefile.cpp:143:46: error: expected ‘;’ before ‘{’ token
इसका मतलब मैं त्रिगुट ऑपरेटर का उपयोग नहीं कर सकता है एक initializer_list
से उनके निर्माता का उपयोग कर बनाई वस्तुओं वापस जाने के लिए? क्या इसके लिए कोई विशेष कारण है?
मेरी सलाह होगी: ** यह बिल्कुल मत करो **। इसे एक सामान्य एल्गोरिदम बनाएं जो एक इटरेटर (जिसका प्रकार टेम्पलेट पैरामीटर है) लेता है, इसलिए जब आप महसूस करते हैं कि 'std :: list' एक खराब विकल्प था, तो आप अपेक्षाकृत दर्द रहित तरीके से कुछ और बदल सकते हैं। –
@ जेरीकॉफिन मैं शायद वह सलाह लेगा;)। मैं जानना चाहता हूं कि यह वैसे भी संभव है (या ऐसा क्यों नहीं है क्योंकि यह नहीं किया जा सकता है)। – mfontanini
ठीक है, काफी उचित है। यह एक दिलचस्प सवाल है (जिसके लिए मैंने अप-वोट किया) भले ही मुझे लगता है कि सटीक एप्लिकेशन शायद सबसे अच्छा नहीं है। –