2011-07-23 3 views
8

27.6.3.4.2 बफर प्रबंधन और स्थितिbasic_streambuf :: seekoff क्या लौटाया जाना चाहिए जब ios_base :: in | ios_base :: आउट निर्दिष्ट है?

pos_type seekoff(off_type off, ios_base::seekdir way, 
    ios_base::openmode which = ios_base::in | ios_base::out); 
  • प्रभाव: एक या एक तरह से नियंत्रित दृश्यों कि प्रत्येक वर्ग के लिए अलग से परिभाषित किया गया है की अधिक भीतर धारा पदों बदलता है इस खंड में basic_streambuf से व्युत्पन्न (27.8.2.4, 27.9.1.5)।
  • डिफ़ॉल्ट व्यवहार: pos_type(off_type(-1)) देता है।

अभी तक, बहुत अच्छा है। basic_streambuf व्युत्पन्न मैं उपयोग कर रहा हूं ios_base::in और/या ios_base::out के लिए अलग-अलग स्थिति बदल सकता है। लेकिन, दोनों को निर्दिष्ट किए जाने पर मुझे वापस लौटने की क्या ज़रूरत है?

आप ios_base::inयाios_base::out निर्दिष्ट करते हैं, हम विशिष्ट अनुक्रम की नई धारा स्थिति लौट आते हैं।

+0

तैनात किया जाना चाहिए वह यह है कि एक विनिर्देश, या एक मजाक की जाँच करें? – curiousguy

+0

@curiousguy - भले ही यह अजीब लगता है, यह वास्तव में एक विनिर्देश है। यह व्युत्पन्न कक्षाओं को एक समझदार तरीके से व्यवहार करने की अनुमति देता है जो विभिन्न कार्यान्वयन और मामलों का उपयोग करने के बीच भिन्न हो सकता है। हालांकि, यह हमेशा सहज नहीं होता है कि कार्यान्वयन कैसे "चाहिए" व्यवहार करना चाहिए। – 0xbadf00d

+0

"_it वास्तव में एक विनिर्देश_" लेकिन यह नहीं है। यह कहीं और कुछ अन्य विनिर्देशों के लिए एक संकेत है। "_ यह व्युत्पन्न कक्षाओं को एक समझदार तरीके से व्यवहार करने की अनुमति देता है जो विभिन्न कार्यान्वयन के बीच भिन्न हो सकता है और मामलों का उपयोग कर सकता है ._" इस "विनिर्देश का क्या मतलब है"? यह जानकर क्या किया जा सकता है कि 'seekoff' धाराओं की स्थिति को एक या अधिक नियंत्रित अनुक्रमों में परिवर्तित करता है जिस तरह से प्रत्येक व्युत्पन्न वर्ग के लिए अलग से परिभाषित किया जाता है? – curiousguy

उत्तर

1

यह निर्धारित करने के लिए आपकी स्ट्रीम में थोड़ा सा है कि क्या होता है। निर्मित धाराएं अलग-अलग होती हैं, जिनमें से कुछ अलग-अलग पढ़ और लिखने की स्थिति (स्ट्रिंगस्ट्रीम) हो सकती हैं जबकि अन्यों में केवल एक (fstream) होता है।

यदि उपयोगकर्ता एक प्रतिस्थापन करता है और दोनों को अंदर और बाहर निर्दिष्ट करता है, तो शायद आपको दोनों को स्थानांतरित करना चाहिए। यदि यह वर्तमान स्थिति प्राप्त करने के लिए शून्य ऑफ़सेट के साथ एक खोज है, तो स्थिति अलग होने पर असफल होने के लिए अनुचित नहीं है।

+0

ऑफसेट द्वारा दोनों को स्थानांतरित करना एक और विकल्प होगा, लेकिन मुझे नहीं पता कि मुझे क्या लौटना चाहिए। मुझे लगता है कि आप सही हैं और स्थिति अलग होने पर विफल होने के लिए सबसे उचित होगा। – 0xbadf00d

0

27.8.2.4 से पूछताछ के बाद ऐसा लगता है कि आप असफल होने की उम्मीद कर रहे हैं।

हालत तालिका 130, जिसमें कहा गया है कि दोनों इनपुट और आउटपुट दृश्यों "एक तरीका है कि प्रत्येक class_ के लिए अलग से परिभाषित किया गया है _in" केवल तभी

(which & (ios_base::in | ios_base::out)) == (ios_base::in) | ios_base::out)) 
and way == either ios_base::beg or ios_base::end 
संबंधित मुद्दे