2

重複の可能性:
一時ストリームへの書き込みが失敗するのはなぜですか?

ostrginstreamいくつかのカスタム ログ コードからクラスを派生させようとしています。奇妙なことに、ストリームに最初に書き込まれたものは常に破損します。以下は、自己完結型の最小限のデモンストレーション プログラムです。

#include <iostream>
#include <sstream>
using namespace std;

class Test : public ostringstream
{
public:
    Test()  { ; }
    ~Test() { cerr << "!" << str() << "!" << std::endl; }
};

int main(void)
{
    Test() << "Hello" << ", " << "World";
}

予想される出力は次のとおりです。!Hello, world!

実際の出力は次のとおりです。

!0x8049d14、ワールド!

一時オブジェクトの作成方法と使用方法に問題があると思います。

簡単に修正できない場合、同じセマンティクスを取得する別の方法はありますか? 私が探しているのは、オブジェクトを簡単に作成し、それにシフトし、デストラクタで完全なメッセージを処理する機能です。(ユース ケースは、カスタム ロギング コードです。デストラクタは、タイムスタンプ、重大度のチェックなどを行います。)

4

0 に答える 0