सबसे पहले, यह लग सकता है कि मैं व्यक्तिपरक राय के लिए पूछ रहा हूं, लेकिन ऐसा नहीं है कि मैं इसके बाद क्या कर रहा हूं। मैं इस विषय पर कुछ अच्छी तरह से जमी हुई दलीलें सुनना पसंद करूँगा।
आधुनिक धाराओं / क्रमांकन ढांचे को कैसे डिजाइन किया जाना चाहिए, इस बारे में कुछ अंतर्दृष्टि प्राप्त करने की उम्मीद में, मैंने हाल ही में खुद को एंजेलिका लैंगर और क्लाउस क्रेफ़ द्वारा लिखी गई किताब स्टैंडर्ड सी ++ आईओएसट्रेस और लोकल्स की एक प्रति मिली है । मुझे लगा कि अगर IOStreams अच्छी तरह से डिज़ाइन नहीं किया गया है, तो यह पहली जगह में C ++ मानक पुस्तकालय में नहीं बना होगा।
इस पुस्तक के विभिन्न भागों को पढ़ने के बाद, मुझे संदेह होने लगा है कि क्या IOStreams की तुलना एसटीएल से कर सकते हैं, समग्र वास्तु-दृष्टि से। अलेक्जेंडर स्टेपानोव (एसटीएल के "आविष्कारक") के साथ इस साक्षात्कार को पढ़ें जैसे कि एसटीएल में गए कुछ डिज़ाइन निर्णयों के बारे में जानने के लिए।
क्या विशेष रूप से मुझे आश्चर्य :
यह अज्ञात प्रतीत होता है कि IOStreams के समग्र डिजाइन के लिए कौन जिम्मेदार था (मैं इस बारे में कुछ पृष्ठभूमि जानकारी पढ़ना पसंद करूंगा - क्या मुझे अच्छे संसाधन पता हैं?)
एक बार जब आप IOStreams, जैसे की तत्काल सतह के नीचे गड्ढा अगर आप अपने खुद के वर्गों के साथ IOStreams का विस्तार करना चाहते हैं, तो आप काफी गुप्त और भ्रमित सदस्य फ़ंक्शन नाम, जैसे के साथ एक इंटरफेस करने के लिए मिल
getloc/imbue,uflow/underflow,snextc/sbumpc/sgetc/sgetn,pbase/pptr/epptr(और वहाँ शायद इससे भी बदतर उदाहरण)। इससे समग्र डिजाइन और एकल भागों का सह-संचालन कैसे होता है, इसे समझना बहुत कठिन हो जाता है। यहां तक कि मैंने जिस पुस्तक का ऊपर उल्लेख किया है, वह भी उस (IMHO) की बहुत मदद नहीं करती है ।
इस प्रकार मेरा प्रश्न:
यदि आपको आज के सॉफ्टवेयर इंजीनियरिंग मानकों (यदि वास्तव में इन पर कोई सामान्य समझौता है) द्वारा न्याय करना है, तो क्या C ++ के IOStreams को अभी भी अच्छी तरह से डिजाइन किया जाएगा? (मैं अपने सॉफ़्टवेयर डिज़ाइन कौशल को उस चीज़ से नहीं सुधारना चाहूंगा जिसे आमतौर पर पुराना माना जाता है।)
std::streambufबाइट्स को पढ़ने और लिखने के लिए बेस-क्लास है, और istream/ ostreamमें फॉर्मैट इन और आउटपुट के लिए है, एक पॉइंटर को std::streambufअपने गंतव्य / स्रोत के रूप में ले रहा है ।
ostream foo(&somebuffer); foo << "huh"; foo.rdbuf(cout.rdbuf()); foo << "see me!";