2010-05-26 19 views
6

के तत्वों पर फ़ंक्शन को लागू करने के लिए बेहतर नाम आवश्यक है मेरे पास एक कंटेनर क्लास है (जिसमें एक बहु-अनुक्रमणिका कंटेनर है) जिसके लिए मेरे पास सार्वजनिक "foreach" सदस्य-फ़ंक्शन है, इसलिए उपयोगकर्ता आवेदन करने के लिए एक मजेदार पास कर सकते हैं सभी तत्व
कार्यान्वयन करते समय, मेरे पास एक ऐसा मामला था जहां मज़ेदार को केवल कंटेनर में किसी श्रेणी के कुछ तत्वों पर लागू किया जाना चाहिए, इसलिए मैंने कुछ मान्य सीमा पारित करने के लिए foreach को अधिभारित किया।
अब, कुछ मामलों में, एक निश्चित शर्त पर रोकना फायदेमंद था, इसलिए व्यावहारिक रूप से, मैंने फोरच को फ़ंक्शन के रिटर्न-वैल्यू के आधार पर रोक दिया।कंटेनर

मैं कैसे प्रणाली काम करता है के साथ खुश हूँ, लेकिन मैं एक चिंता का विषय है:
एक श्रृंखला पर एक "foreach", बंद की स्थिति के साथ कैसे कहा जाना चाहिए?
कोई भी सामान्य, स्पष्ट और संक्षिप्त नाम जानता है?

+0

__________ – kenny

उत्तर

6

आपके विवरण के आधार पर, मैं apply_until() के लिए जाऊंगा।

+0

मुझे लागू _... नाम पसंद है क्योंकि यह दिखाता है कि यह फ़ंक्शंस लागू करने के लिए एक इंटरफ़ेस है। आश्चर्यजनक रूप से पर्याप्त, मैंने इसे शीर्षक में रखा, लेकिन यह वास्तव में इसे फ़ंक्शन नाम के रूप में उपयोग करने के लिए मेरे दिमाग को पार नहीं कर पाया है। मुझे लगता है, मेरे सिर में फोरच बहुत ज्यादा अटक गया था। – stefaanv

0

एक सामान्य नाम? ConditionalIterator? RangeIterator? या चूंकि यह एक समारोह है, शायद IterateRange?

0

कैसे find_if(...), एसएलएल के रूप में?

2

शायद until या कुछ?

1

मैं शायद इसे कहते चाहते हैं या तो foreach_until या foreach_while (_if कार्यों replace_if और remove_if तरह के आधार पर एक का पालन करना, सिवाय इसके कि हालत यहाँ नहीं "अगर" हर एक सच है, यह "जब तक" है है के प्रयास में अंत स्थिति रखती है)। या बस foreachstd::for_each मज़ेदार के वापसी मूल्य को अनदेखा करता है, लेकिन इसका मतलब यह नहीं है कि आपके फ़ंक्शन को foreach कहा जाता है। मुझे लगता है कि कॉलबैक फ़ंक्शन के लिए यह एक बहुत ही सामान्य मुहावरे है जिसमें रिटर्न वैल्यू है जो नियंत्रण लूप से प्रारंभिक निकास की इजाजत देता है।

यदि कॉलबैक या तो गलत मान (जारी रखने के लिए) या एक वास्तविक मान (रोकना) देता है, तो आप फ़ंक्शन find_if पर कॉल कर सकते हैं। यह मूल रूप से यह है कि, और इसे std::find_if का उपयोग करके कार्यान्वित किया जा सकता है, भले ही कॉलर में दिलचस्पी नहीं है जिसमें इटेटरेटर ने अंत स्थिति को उकसाया है।

+0

मैं find_if द्वारा चिंतित हूं, क्योंकि इसका उत्तर दो बार दिया जाता है। मैंने सोचा कि "ढूंढें ..." - फ़ंक्शंस सदस्यों को लौटने के बारे में हैं और "..._ अगर" फ़ंक्शंस का उपयोग "भविष्यवाणियों" के रूप में किया जाता है जैसे "शुद्ध कार्य जो कुछ शर्त के आधार पर एक बूलियन लौटाते हैं"। क्या मैं बहुत सख्त हूं? – stefaanv

+0

भविष्यवाणियां एक मूल्य को "सत्य के रूप में टेस्ट करने योग्य" लौटाती हैं, जरूरी नहीं कि एक बूलियन। उन्हें शुद्ध होने की आवश्यकता नहीं है, लेकिन उन्हें अपने पैरामीटर पर गैर-कॉन्स फ़ंक्शंस को कॉल नहीं करना चाहिए: मैंने एक शर्त के रूप में उल्लेख करने की उपेक्षा की। सभी 25/7 में। आप सही हैं कि 'ढूंढें' फ़ंक्शन "स्टॉप" को ट्रिगर करने वाले इटरेटर को वापस करने के बारे में हैं, लेकिन आप हमेशा वापसी मान को अनदेखा कर सकते हैं। वास्तव में मेरा मतलब यह है कि यदि आप चाहते हैं कि 'find_if' "पर्याप्त" है, तो इसका उपयोग करें भले ही अवधारणात्मक रूप से आपको कुछ भी नहीं मिल रहा हो। यदि यह "पर्याप्त नजदीक" नहीं है, तो उस नाम का उपयोग न करें :-) –

1

यदि आप एक सबसेट फ़ंक्शन प्रदान कर सकते हैं जो रुचि के तत्वों का एक दृश्य देता है, तो आपको apply_until() की आवश्यकता नहीं है। बस myContainer.subset(3, 17).foreach(myFunctor) मुझे लगता है कि यह चिंताओं का एक बेहतर अलगाव है।

+0

वाह, एक अलग दृष्टिकोण का प्रकार। सुनने में अच्छा है।व्यावहारिक रूप से मेरे लिए, इसका मतलब यह होगा कि आंतरिक कंटेनर तक पहुंच के साथ एक और वर्ग (सबसेट) होना चाहिए। – stefaanv

+0

दूसरे विचार पर, इसे केवल 2 पुनरावृत्तियों की आवश्यकता होगी, इसलिए मुझे इसे ध्यान में रखना चाहिए – stefaanv