2012-09-18 26 views
8

सेट नहीं कर रहा है, मैं विधि पबेटबफ का उपयोग करके स्ट्रिंग की प्रतिलिपि किए बिना स्ट्रिंगस्ट्रीम ऑब्जेक्ट के स्ट्रिंगबफर को संशोधित करने का प्रयास कर रहा हूं, लेकिन यह काम नहीं कर रहा है। मैं http://www.cplusplus.com/reference/iostream/streambuf/pubsetbuf/ में प्रलेखन का पालन कर रहा हूं। यहाँ मेरी उदाहरण कोड है:स्ट्रिंगस्ट्रीम-> rdbuf() -> पबेटबफ बफर

#include <iostream> 
#include <sstream> 

int main(int argc, char* argv[]) 
{ 
    std::stringstream stream("You say goodbye"); 
    char replace[] = {"And I say hello"}; 
    std::cout << stream.str() << std::endl; // Checking original contents 
    stream.rdbuf()->pubsetbuf(replace, 16); // Should set contents here 
    std::cout << stream.str() << std::endl; // But don't :(
    return 0; 
} 

और उत्पादन होता है:

You say goodbye 
You say goodbye 

मैं जानता हूँ कि मैं stream.str (की जगह) का उपयोग कर सकते हैं, लेकिन इस विधि प्रतियां 'की जगह ले' का मान, और मैं एक प्रतिलिपि बनाना नहीं चाहते हैं।

मुझे क्या याद आ रही है?

अद्यतन: मैं उपयोग कर रहा हूँ VS2010

+1

एसओ की बस एक हास्यास्पद त्वरित खोज डिफ़ॉल्ट का उपयोग करता है? http://stackoverflow.com/questions/1494182/setting-the-internal-buffer-used-by-a- मानक- स्ट्रीम-pubsetbuf –

+0

यदि आप वीएस का उपयोग कर रहे हैं, तो [इस सवाल] पर एक नज़र डालें (http://stackoverflow.com/q/10054396/416627) (और उत्तर)। ऐसा लगता है कि ऐसा नहीं लगता है कि यह करता है। यह कार्यान्वयन परिभाषित किया गया है और केवल लागू किया गया है जहां यह समझ में आता है। –

+0

संभावित डुप्लिकेट [मानक स्ट्रीम (पबेटबफ) द्वारा उपयोग किए जाने वाले आंतरिक बफर को सेट करना] (http://stackoverflow.com/questions/1494182/setting-the-internal-buffer-used-by-a- मानक- स्ट्रीम-pubsetbuf) –

उत्तर

10

नहीं सामग्री स्थापित करना चाहिए। pubsetbuf कॉल virtual setbuf

basic_streambuf<charT,traits>* setbuf(charT* s, streamsize n); 

15 प्रभाव: कार्यान्वयन से परिभाषित, कि setbuf (0,0) को छोड़कर कोई प्रभाव नहीं है।

16 रिटर्न: यह। आप इस समस्या का सामना कर रहे हैं -

वी.एस. 2010 basic_stringbuf में आभासी विधि setbuf का कोई अधिभार नहीं है, यह से basic_streambuf

virtual _Myt *__CLR_OR_THIS_CALL setbuf(_Elem *, streamsize) 
    { // offer buffer to external agent (do nothing) 
    return (this); 
    } 
+0

धन्यवाद। हालांकि, दस्तावेज में "विशिष्ट कार्यान्वयन" कंक्रीट कक्षाओं का जिक्र कर रहा था, विशिष्ट विक्रेता कार्यान्वयन के लिए नहीं। मुझे लगता है कि यह किसी भी सी ++ कंपाइलर में अच्छी तरह से काम करेगा। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^