मुझे विरासत कोड का एक भयानक बिट विरासत मिला है जिसमें उपयोगिता वर्ग परिभाषा के लगभग 1000 लाइनें शामिल हैं जिन्हें स्रोत फ़ाइल में "असली" कोड से पहले प्रकट होने की आवश्यकता है। वह भी विरासत वर्गों जुड़े हो सकता है अन्य मॉड्यूल के साथ संघर्ष से बचने के लिए, मैं एक अनाम नेम स्पेस में उपयोगिता वर्ग डाल दिया है:क्या प्रति संकलन इकाई केवल एक अनाम नामस्थान है?
namespace {
class OldUtils {
OldUtils();
int foo();
double bar();
};
OldUtils::OldUtils() {
// hundreds of lines
}
int OldUtils::foo() {
// hundreds more lines
}
...
}
class ActuallyInteresting {
// uses OldUtils
};
लेकिन मैं ActuallyInteresting
कोड है कि लोगों को (वास्तव में) में रुचि होगी किया जाना पसंद करेंगे फ़ाइल के शीर्ष के पास, उदाहरण के लिए दाएं तरफ से दाएं 50 से शुरू, उदा। लाइन 1000 से शुरू करना। एक भयानक उपयोगिता वर्ग को एक अलग संकलन इकाई में विभाजित करना एक विकल्प नहीं है, उच्च स्तरीय कारणों के लिए मैं अंदर नहीं जाऊंगा!
तो मैं सोच रहा हूं कि शॉर्ट क्लास घोषणा को रखना संभव है - विधि परिभाषाओं के बिना - फ़ाइल के शीर्ष पर एक अनाम नामस्थान में, और नीचे किसी अन्य अनाम नाम में अधिक विधि परिभाषाएं:
namespace {
class OldUtils {
OldUtils();
int foo();
double bar();
};
}
class ActuallyInteresting {
// uses OldUtils
};
namespace {
OldUtils::OldUtils() {
// hundreds of lines
}
int OldUtils::foo() {
// hundreds more lines
}
...
}
इन दो "अलग" अनाम नामस्थान संकलन इकाई के भीतर एक ही दायरे रूप में माना जाएगा, या विभिन्न अद्वितीय नामस्थान प्रत्येक के लिए उत्पन्न हो जाएगा? क्या मानक के बारे में कुछ कहना है?
प्रत्येक अनाम नाम स्थान प्रत्येक अनुवाद इकाई के लिए अद्वितीय हो जाएगा (एक अनुवाद इकाई में स्थिर के रूप में ही) –
@ DieterLücking: अगर यह सच है, कैसे एक पहुँच एक और अनुवाद इकाई में एक अनाम नाम स्थान में एक वैश्विक चर करता है? क्या अन्य अनुवाद इकाई का नाम स्कोप रिज़ॉल्यूशन टेक्स्ट में जोड़ा जाता है? –