3

チェーン(out << "one" << "two")を処理しないこのコードのバージョンを実行しようとすると、コンソール出力とログファイルにテキストを出力するカスタムcoutクラスを作成しようとしています。しかし、チェーンを処理しようとすると、「この演算子関数のパラメーターが多すぎます」というメッセージが表示されます。私は何が欠けていますか?

class CustomOut
{
    ofstream of;

public:
   CustomOut()
   {
     of.open("d:\\NIDSLog.txt", ios::ate | ios::app);
   }

   ~CustomOut()
   {
     of.close();
   }

   CustomOut operator<<(CustomOut& me, string msg)
    {
    of<<msg;
    cout<<msg;

    return this;
}};
4

1 に答える 1

5

operator<<オブジェクトインスタンスへの参照を返すメンバーが必要です。

class CustomOut
{
  ...

  CustomOut& operator<<(string const& msg)
  {
    // Process message.
    f(msg);

    return *this;
  }
};

CustomOutこれにより、連鎖的にクラスに「ストリーミング」できるようになります。

CustomOut out;
out << str_0 << str_i << ... << str_n;
于 2012-08-15T17:42:50.580 に答える