4

私は現在、私の側から実装されたコールバックを必要とするacライブラリを使用しているc ++アプリケーションで作業しています。たとえば、コールバックは次のように定義されています。

int onWrite(char *what, char *buffer, size_t size, off_t offset);

フォーマットしてバッファに書き込む必要があるstd::setがあり、サイズとオフセットを処理します。ここで、サイズはバッファのサイズであり、すでに処理されたバイト数のオフセットです

ストリームのようにバッファに入れることができる C++ の方法はありますか? 私はこのようなことを考えています:

SomeSTLStandardStream stream(buffer,size);
stream.ignore(offset);  // to drop the first n offset bytes
for(it=dataset.begin();it!=dataset.end() && stream.buffer_avail()>0;it++)
    stream << *it << "|"; // format csv like for example

私が持っている中心的な質問は次のとおりです。フォーマット/ストリーミングされたデータのスライスだけを取得して、指定されたバッファーに書き込む標準的な C++ の方法はありますか?

病気でない場合は、自分で実装する必要があります

私もstringstreamを見ましたが、私のニーズに正確に適合していないようで、私の代わりに独自の書き込みバッファーを使用しているため、すでに書き込まれているバイト数もわかりません....

どうも

4

1 に答える 1

3

次を使用して、メモリを割り当てて文字列ストリームにラップできますstd::stringstream::pubsetbuf

 int main()
 {
    char buf[1024];

    std::stringstream stream;

    stream.rdbuf()->pubsetbuf(buf, sizeof(buf));

    stream<< "Hello " << "World " << std::endl;

    std::string str;
    std::getline(stream, str);
    std::cout << str << std::endl;

    //...
}

std::stringstreamstd::basic_streambufおよびをお読みくださいstd::basic_stringbuf

于 2013-05-03T13:52:54.590 に答える