मेरे पास एक मेमोरी ब्लॉक (अपारदर्शी) है, कि मैं अपने सी ++ एडाप्टर के माध्यम से mySQL में ब्लॉब में स्टोर करना चाहता हूं। अनुकूलक एक IStream उम्मीद:मेमोरी बफर में से एक C++ std :: istringstream प्रारंभ करना?
virtual void setBlob(unsigned int parameterIndex, std::istream * blob) = 0;
तो मेरे सवाल है: कैसे मैं एक std :: इस स्मृति ब्लॉक से IStream बना सकते हैं (चार * के रूप में टाइप किया)। यह एक स्ट्रिंग नहीं है क्योंकि यह शून्य-समाप्त नहीं हुआ है (लेकिन मुझे इसकी लंबाई की लंबाई पता है)।
मुझे अपनी स्मृति ब्लॉक की प्रतिलिपि किए बिना इसे करने का कोई तरीका नहीं मिला उदाहरण के लिए std :: string में। मुझे लगता है कि यह थोड़ा अपमानजनक है। ऐसा कुछ काम नहीं करता है:
std::streambuf istringbuf(blockPtr, blockLength);
std::istringstream tmp_blob(&istringbuf);
क्योंकि std :: streambuf में ऐसा कोई कन्स्ट्रक्टर नहीं है। मैंने निम्नलिखित सुझाव देखा।
std:: istringstream tmp_blob;
tmp_blob.rdbuf()->pubsetbuf(blockPtr, blockLength);
क्या यह सही तरीका है? एसटीडी पर
की ([आंतरिक एक मानक धारा (pubsetbuf) द्वारा इस्तेमाल किया बफर स्थापना] संभावित डुप्लिकेट http://stackoverflow.com/questions/1494182/setting-the-internal-buffer- प्रयुक्त-द्वारा-मानक-स्ट्रीम-पबेटबफ) –