私は固定長のchar型のバッファを持っており、std :: istreamを取る関数にフィードしたいのです&。バッファをコピーせずにどうすればいいですか?既存のバッファへのstd :: istreamインタフェースをコピーせずに提供する
カスタムストリームビルドを派生させることを意味するなら、私はそのコピーで暮らすと思います。私は何かが簡単に欠けているのだろうかと思っています。ここで
は(不要なコピーをしている)私が今やっているものです:
void loadFromBuffer(const char* buff, size_t len) {
std::istringstream is(std::string(buff, len)); // BUFFER COPIED HERE :(
load(is);
}
は編集:
記録のために、ここでboost.Iostreamsを使用して簡単な解決策があります:
#include <boost/iostreams/device/array.hpp>
#include <boost/iostreams/stream.hpp>
void loadFromBuffer2(char* buff, size_t len) {
typedef boost::iostreams::stream<boost::iostreams::array_source> array_stream;
array_stream is(buff, len);
load(is);
}
私はBoost.Iostreamsの回答を受け入れました。なぜなら、 "正しい"解決策であると思われるからです。しかし、oはコンパイルされません。私のプラットフォーム(Android NDK)では、廃止予定のstd :: istrstreamソリューションを使用してしまいました。みんな、ありがとう。
あなたは離れて、この場合、最適化されていなかったコピーをチェックしましたか? – log0
ちょうどあなたの情報のために、 'std :: istrstream'はこの機能を提供します。 コンストラクタ '(char *、streamsize)'を持っています。 しかし、ご存知のとおり、このクラスは非推奨です... –