প্রথমত, মনে হতে পারে যে আমি ব্যক্তিগত মতামত চাইছি, তবে এটি আমি পরে করছি না। আমি এই বিষয়ে কিছু ভাল ভিত্তি যুক্তি শুনতে পছন্দ করি।
একটি আধুনিক স্ট্রিম / সিরিয়ালাইজেশন কাঠামোটি কীভাবে ডিজাইন করা উচিত সে সম্পর্কে কিছুটা অন্তর্দৃষ্টি পাওয়ার আশায় আমি সম্প্রতি এঞ্জেলিকা ল্যাঙ্গার এবং ক্লাউস ক্রেফ্টের স্ট্যান্ডার্ড সি ++ আইওএসট্রিমস এবং লোকালস বইটির একটি অনুলিপি পেয়েছি । আমি বুঝতে পেরেছিলাম যে যদি আইওএসট্রিমগুলি ভালভাবে ডিজাইন না করা হয় তবে এটি এটি প্রথম স্থানে সি ++ স্ট্যান্ডার্ড লাইব্রেরিতে তৈরি করতে পারত না।
এই বইয়ের বিভিন্ন অংশ পড়ার পরে, আমি যদি সন্দেহ করি যে আইওএসট্রিমিগুলি সামগ্রিক আর্কিটেকচারাল পয়েন্ট অফ ভিউ থেকে উদাহরণ হিসাবে এসটিএল এর সাথে তুলনা করতে পারে তবে আমার সন্দেহ হতে শুরু করছে। যেমন , এসটিএলে কিছু ডিজাইনের সিদ্ধান্ত নিয়েছে তা জানতে আলেকজান্ডার স্টেপানভের (এসটিএলের "উদ্ভাবক") এই সাক্ষাত্কারটি পড়ুন ।
বিশেষত আমাকে কী আশ্চর্য করে :
আইওএসট্রিমের সামগ্রিক নকশার জন্য কে দায়ী ছিলেন তা অজানা বলে মনে হচ্ছে (আমি এ সম্পর্কে কিছু পটভূমি তথ্য পড়তে পছন্দ করব - কেউ কি ভাল সংস্থান জানে?);
একবার আপনি আইওএসটিস্ট্রিমের তাত্ক্ষণিক পৃষ্ঠের নীচে ডেলিভেশন করে, যেমন আপনি যদি নিজের ক্লাসের সাথে আইওএসট্রিমগুলি প্রসারিত করতে চান তবে আপনি মোটামুটি ক্রিপ্টিক এবং বিভ্রান্তকারী সদস্য ফাংশন নামগুলির সাথে একটি ইন্টারফেসে যান, যেমন,
getloc
/imbue
,uflow
/underflow
,snextc
/sbumpc
/sgetc
/sgetn
,pbase
/pptr
/epptr
(এবং সেখানে সম্ভবত আরও খারাপ উদাহরণ)। সামগ্রিক নকশা এবং একক অংশগুলি কীভাবে সহযোগিতা করে তা বুঝতে এটি এত বেশি শক্ত করে তোলে। এমনকি বই আমি পূর্বেই উল্লেখ করা সাহায্য না যে অনেক (এই প্রোগ্রামটিতে)।
এইভাবে আমার প্রশ্ন:
আপনি আজকের সফটওয়্যার ইঞ্জিনিয়ারিং মান অনুযায়ী বিচারক ছিল থাকেন (যদি সেখানে আসলে হয় হবে সি ++ এর IOStreams এখনও ভাল ডিজাইন বিবেচনা করা এই কোন সাধারণ চুক্তি)? (আমি সাধারণত পুরানো হিসাবে বিবেচিত এমন কোনও জিনিস থেকে আমার সফ্টওয়্যার ডিজাইন দক্ষতা উন্নত করতে চাই না))
std::streambuf
বাইট পড়ার এবং লেখার জন্য বেস-ক্লাস এবং istream
/ ostream
এবং বিন্যাসটি ইন- এবং আউটপুট জন্য std::streambuf
হয়, এটির গন্তব্য / উত্স হিসাবে একটি পয়েন্টার গ্রহণ করে ।
ostream foo(&somebuffer); foo << "huh"; foo.rdbuf(cout.rdbuf()); foo << "see me!";