में मैक्रो मैं एक 'foreach' मैक्रो मैं सी में अक्सर उपयोग ++ कि ज्यादातर एसटीएल कंटेनरों के लिए काम करता है:"foreach मूल्यों" जीसीसी और सीपीपी
#define foreach(var, container) \
for(typeof((container).begin()) var = (container).begin(); \
var != (container).end(); \
++var)
(ध्यान दें कि 'typeof' एक जीसीसी विस्तार है।) इसका उपयोग इस प्रकार किया जाता है:
std::vector<Blorgus> blorgi = ...;
foreach(blorgus, blorgi) {
blorgus->draw();
}
मैं कुछ ऐसा करना चाहता हूं जो मानचित्र के मूल्यों पर पुनरावृत्त हो। इसे "foreach_value" कहें, शायद। तो लेखन के बजाय
foreach(pair, mymap) {
pair->second->foo();
}
मैं लिखते थे
foreach_value(v, mymap) {
v.foo();
}
मैं नहीं, ऐसा मैक्रो यह कर देगा के साथ आ सकता है क्योंकि यह दो चर घोषित करने की आवश्यकता है: इटरेटर और मूल्य चर (' वी ', ऊपर)। मैं नहीं जानता कि लूप के प्रारंभकर्ता में, जीसीसी एक्सटेंशन का उपयोग करने के लिए इसे कैसे करें। मैं इसे foreach_value कॉल से ठीक पहले घोषित कर सकता हूं, लेकिन फिर यह उसी दायरे में foreach_value मैक्रो के अन्य उदाहरणों के साथ संघर्ष करेगा। अगर मैं वर्तमान लाइन नंबर को इटरेटर वैरिएबल नाम पर प्रत्ययित कर सकता हूं, तो यह काम करेगा, लेकिन मुझे नहीं पता कि यह कैसे करना है।
बिल्कुल सही! लेकिन मैं एक अतिरिक्त वस्तु बनाने के बारे में थोड़ा समझ में नहीं आता। var एक सूचक है। क्या आपके पास पहले संस्करण था जो एक मूल्य का उपयोग करता था? और var को अभी तक एक और (innermost) लूप के साथ संदर्भ बनाया जा सकता है: के लिए (typeof (...) var = * ptr; ptr; ptr = NULL)। उस के साथ अद्यतन करने के लिए देखभाल? – sfink