سؤال

فقط بدافع الفضول، كيف يمكن iOStream الوصول إلى نظام الإخراج الإخراج. (لدي عادة سيئة لإعادة اختراع العجلة باستمرار، وأنا أتساءل عما إذا كان بإمكاني إنشاء نظام إخراج مخصص لإثبات IOSTREAM).

هل كانت مفيدة؟

المحلول

للحصول على دليل مفصل إلى IOStreams، راجع الكتاب القياسية C ++ iOStreams والمحلات. وبعد بعد قراءة ذلك، أظن أنك ستكون محتوى للإدارة مع الوضع الراهن - IOStreams ربما الجزء الأكثر تعقيدا من مكتبة C ++ القياسية.

نصائح أخرى

هذا يعتمد...

يتفاعل بطريقة أو بأخرى مع نظام IO الأصلي لنظام التشغيل. قد تستخدم IT داخليا مكتبة C، والتي تستخدم مكالمات النظام إلى Kernel، أو قد تستخدم مكالمات النظام مباشرة. التنفيذ الدقيق يعتمد اعتمادا كبيرا على النظام الأساسي.

سيقول الكثير من الناس لا إعادة اختراع العجلة، لكن يمكن أن يكون تجربة تعليمية جيدة. إذا كنت تستخدم Windows، فابحث في مكالمات API Win32 لمعالجة الملفات. إذا كنت تستخدم Linux، فما استخدام مكتبة Posix / C، أو استخدم مكالمات النظام (أصعب بكثير، أود أن أقترح الذهاب مع مكتبة C).

بالتأكيد يمكن إعادة اختراع العجلة.

هناك الكثير من المضاعفات المضافة إلى مشغلي الدفق للتعامل مع مجموعات الأحرف الدولية. بعد أن نظرت إليها بشكل معقول بعمق أنا حقا لا أهتم به كثيرا. انها معقدة جدا وتدمير تماما أي فرصة لاستخدام الميراث بسهولة. إنه يعمل ومتوفر على الرغم من. (أردت تغيير سلوك التخزين الذي يستخدمه أثناء التحويلات)

جميع الجداول تذهب إلى Streambuf. هذا streambuf سوف يعتمد على نوع الدفق. يذهب owstream إلى fstreambuf؛ يذهب cout إلى بعض streambuf غير محدد. إذا كنت ترغب في تخصيص الأشياء، فإن Cout يسمح لك بالحصول على هذا Streambuf وربما استبداله.

نمط مشترك هو "Streampubuf"، وهو واجهة StreamBuf التي تحول مدخلاتها قبل إرسالها إلى Streambuf آخر. يمكن دمج هذا مع COUT: اخراج Streambuf الأصلي، التفاف أنه في Streambuf تصفية، ووضع هذا المجمع مرة أخرى في cout. لا تحتاج إلى معرفة كيفية عمل Streambuf الأصلي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top