मैं एक फ़ंक्शन का उपयोग करने की कोशिश कर रहा हूं जो किसी तृतीय पक्ष lib में आता है और एक इनपुट स्ट्रीम ऑब्जेक्ट की अपेक्षा करता है जिसमें बाइनरी फ़ाइल डेटा ले जाया जाता है।सुविधाजनक स्ट्रीम std :: vector <unsigned char> इनपुट स्ट्रीम (std :: istream) ऑब्जेक्ट
हस्ताक्षर कि तरह लग रहा है:
doSomething(const std::string& ...,
const std::string& ...,
std::istream& aData,
const std::string& ...,
const std::map<std::string, std::string>* ...,
long ...,
bool ...);
जब से मैं नहीं बदल सकते हैं/इस 3 पार्टी lib/समारोह बदलने के लिए, मैं "मेरी" कोड में अनुकूल करने के लिए किया है। कॉलिंग जगह में, मेरे पास एक std :: वेक्टर है जिसमें डेटा है जो एक आईट्रीम ऑब्जेक्ट में पारित होने की उम्मीद है। वर्तमान में मैं वेक्टर को धारा में प्रतिलिपि बनाकर, < < ऑपरेटर का उपयोग करके बाइट द्वारा बाइट कॉपी करने के लिए प्रतिलिपि बना रहा हूं।
मुझे दृढ़ता से संदेह है कि एक अधिक प्रभावी/सुविधाजनक तरीका हो सकता है लेकिन अब तक कुछ भी उपयोगी नहीं हो सका। किसी भी मदद/आपके विचारों की बहुत सराहना की जाती है।
std::vector<unsigned char> my_vec;
my_vec.push_back('a');
my_vec.push_back('b');
my_vec.push_back('c');
my_vec.push_back('\n');
// make an imput stream from my_vec
std::stringstream is;
is.rdbuf()->pubsetbuf(reinterpret_cast<char*>(&my_vec[0]), my_vec.size());
// dump the input stream into stdout
std::cout << is.rdbuf();
@NeilKirk:
बेस्ट, जे आर
मुझे नहीं लगता कि आप ** ** ** ** ** ** ** ** की अपेक्षा कैसे करते हैं। –
हां, आप एक ** istream ** पर << ऑपरेटर का वास्तव में उपयोग कैसे करते हैं? – HighCommander4
प्रासंगिक? http://stackoverflow.com/questions/9319813/overloading-operator-for-c-stl-containers/9320896#9320896 – BoBTFish