で生データを渡す私は(バッファからイメージをロード機能など)の機能にいくつかの生データを渡したい時はいつでも、私はこのような何かをするだろう:これまでC++
void Image::load(const char* buffer, std::size_t size);
今日はproperty_tree/xml_parser.hpp
ヘッダーで、より具体的には、Boostライブラリを見ていた、と私は、この関数のシグネチャに気づい:
template<typename Ptree>
void read_xml(std::basic_istream<typename Ptree::key_type::value_type>&,
Ptree &, int = 0);
これは実際に私は好奇心作られた:これはC++での生データの周りに渡すための正しい方法です、ストリームを使って?あるいは、私は関数が使われるはずのものを誤って解釈していますか?
前者の場合は、ストリームを使用する方法を学ぶことができるリソースを教えてください。私は自分自身(主にAPIリファレンス)を見つけられず、XMLパーサのBoostソースコードも見つけられませんでした。
編集:いくつかの余分な詳細
は、私が欲しいもののように、いくつかの混乱があっただようです。データバッファを指定すると、私は上記に投稿したread_xml
関数と互換性があるようにストリームにどのように変換できますか?具体的な使用例は次のとおりです。
私はSevenZip C libraryを使用してアーカイブからXMLファイルを読み取ります。ライブラリは私にバッファとそのサイズを提供し、それをread_xml
と互換性があるようなストリーム形式にしたいと思います。どうやってやるの?
いいえ、私は参考文献とポインタを知っています。 _Streams_は、あなたがそれらと一緒にサイズを渡す必要がないので(より安全です)、裸のデータバッファと比較して優れています。私はそのようなデータストリームを作成する方法を知りたいですが、私はウェブ上のリソースを見つけていません。 –
あなたはそれらのサイズをそれらに沿って渡します - 実際のデータ/コンテンツと共にオブジェクトの中に隠されているだけです。ポインタの長さだけでなく構造体もCで渡すことができます。独自のストリームを作成するには、あらかじめ定義されたストリームクラスのいずれかを使用するか、異なるメンバメソッドの独自のバージョンを実装する独自の派生クラスを作成します。 – Mario