ก่อนอื่นอาจดูเหมือนว่าฉันกำลังขอความคิดเห็นส่วนตัว แต่นั่นไม่ใช่สิ่งที่ฉันตามมา ฉันชอบที่จะได้ยินข้อโต้แย้งที่มีเหตุผลในหัวข้อนี้
ในความหวังในการได้รับข้อมูลเชิงลึกบางเป็นวิธีการกรอบลำธาร / อนุกรมที่ทันสมัยควรจะได้รับการออกแบบที่ฉันเพิ่งได้ตัวเองสำเนาของหนังสือc ++ มาตรฐาน IOStreams และตำแหน่งที่ตั้งโดย Angelika แลงเกอร์และเคลาส์ Kreft ฉันคิดว่าถ้า IOStreams ไม่ได้รับการออกแบบมาอย่างดีมันจะไม่ทำให้มันอยู่ในไลบรารีมาตรฐาน C ++ ตั้งแต่แรก
หลังจากได้อ่านส่วนต่างๆของหนังสือเล่มนี้ฉันเริ่มมีข้อสงสัยว่า IOStreams สามารถเปรียบเทียบกับเช่น STL จากมุมมองทางสถาปัตยกรรมโดยรวมได้หรือไม่ อ่านเช่นบทสัมภาษณ์ของ Alexander Stepanov ("นักประดิษฐ์" ของ STL)เพื่อเรียนรู้เกี่ยวกับการตัดสินใจในการออกแบบบางอย่างที่เข้าสู่ STL
สิ่งที่ทำให้ฉันประหลาดใจเป็นพิเศษ :
ดูเหมือนว่าจะไม่ทราบว่าใครเป็นผู้รับผิดชอบการออกแบบโดยรวมของ IOStreams (ฉันชอบอ่านข้อมูลพื้นฐานเกี่ยวกับเรื่องนี้ - มีใครรู้แหล่งข้อมูลดีๆบ้างไหม);
เมื่อคุณเจาะลึกลงไปใต้พื้นผิวของ IOStreams ในทันทีเช่นหากคุณต้องการขยาย IOStreams ด้วยคลาสของคุณเองคุณจะเข้าสู่อินเทอร์เฟซที่มีชื่อฟังก์ชันสมาชิกที่ค่อนข้างคลุมเครือและสับสนเช่น
getloc
/imbue
,uflow
/underflow
,snextc
/sbumpc
/sgetc
/sgetn
,pbase
/pptr
/epptr
(และมี อาจเป็นตัวอย่างที่แย่กว่านั้น) สิ่งนี้ทำให้เข้าใจการออกแบบโดยรวมและการทำงานร่วมกันของชิ้นส่วนเดี่ยวได้ยากขึ้นมาก แม้หนังสือที่ผมกล่าวข้างต้นไม่ได้ช่วยที่มาก (IMHO)
ดังนั้นคำถามของฉัน:
หากคุณมีที่จะตัดสินตามมาตรฐานวิศวกรรมซอฟต์แวร์ของวันนี้ (ถ้ามีจริงเป็นข้อตกลงใด ๆ ทั่วไปเกี่ยวกับเหล่านี้) จะ c ++ 's IOStreams ยังถือว่ามีการออกแบบที่ดี? (ฉันไม่ต้องการพัฒนาทักษะการออกแบบซอฟต์แวร์จากสิ่งที่ถือว่าล้าสมัยโดยทั่วไป)
std::streambuf
เป็นคลาสฐานสำหรับการอ่านและเขียนไบต์และistream
/ ใช้ostream
สำหรับการจัดรูปแบบในและเอาต์พุตโดยใช้ตัวชี้std::streambuf
เป็นปลายทาง / ต้นทาง
ostream foo(&somebuffer); foo << "huh"; foo.rdbuf(cout.rdbuf()); foo << "see me!";