एक istream_view क्या है और मैं एक का उपयोग कब करूं?

Dec 12 2020

जाहिरा तौर पर, C ++ 20 में एक नया- std::istreamसंबंधित निर्माण है std::istream_view:। इस पर cppreference पेज एक ठूंठ अभी । तो, क्या एक "के बारे में एक दृष्टिकोण है istream" और मैं इसके लिए क्या उपयोग कर सकता हूं?


† - ठीक है, तकनीकी रूप से यह एक पृष्ठ के बारे में पुनर्निर्देशित करता है std::basic_istream_viewऔर वह एक स्टब है।

जवाब

3 einpoklum Dec 12 2020 at 05:32

एक std::istream_view<T>एक है सीमा ; और अधिक विशेष रूप से, एक दृश्य के रूप में बनाई गई सीमा । यह मानक पुस्तकालय के अतिरिक्त है जो आपको std::ranges::viewsइसके अंतर्गत मिल सकता है - सिवाय इसके कि यह एक मनमानी रेंज का दृश्य नहीं है, लेकिन एक का std::istream

तो "देखना" किस पर लागू होता है std::istream? स्मरण करो istreamकि वर्णों की एक धारा है , Tअपनी पसंद के मनमाने तत्वों की नहीं। उन पात्रों को लगातार T's' में देखने का आलसी अनुप्रयोग istream का "देखना" है। यही है, k'th तत्व वह std::istream_view<T>(is)है जिसे आप k'th समय को प्रकार के is >> tलिए चला रहे tहैं T

जब आप अपना कोड लागू करना चाहते हैं, तो आप एक std::istream_view( सावधानी से ) का उपयोग करेंगे , जो रेंज के साथ काम करता है, सीधे इनपुट डेटा के लिए - अपने इनपुट को पहले से अधिक "पुराने-स्कूल" तरीके से कुछ डेटा संरचना में पार्स करने के बजाय, फिर उस संरचना पर काम करना एक सीमा के रूप में।

अन्य क्या है पर लेता std::istream_viewहै:

  • @ बेरी ने एक कोरटाइन के बराबर के रूप में वर्णित किया है जो Tएक इस्क्रीम से पारस है; विवरण के लिए इस उत्तर को पढ़ें (ध्यान दें कि यह पर्वतमाला- v3 में istream दृश्य के बारे में है, जिनमें से अधिकांश मानक श्रेणी पुस्तकालय बन गए हैं)।
  • @ एनकोलबोल इसे " std::istream_iterator<T>C ++ 20 दृश्य इंटरफ़ेस में लपेटने" का परिणाम मानते हैं ।