2017-02-02 6 views
0

CGIアプリケーションで作業していますが、Content-Lengthなどの応答ヘッダーを本体の前に送信する必要がありますが、本体が完全に形成されるまではわかりません。私はただの文字列を使用し、連結私が行くように、私はcoutと同様< <演算子を使って好きなので、私はこの小さなクラスを作成できます。CGIプログラムのカスタム出力バッファー、演算子のオーバーロード

#include <iostream> 

using namespace std; 

class outbuf { 
    public: 
     void operator<<(const char *str) { 
      this->buffer+= str; 
     } 

     void operator<<(const string &str) { 
      this->buffer+= str; 
     } 

     void obsend() { 
      cout << this->buffer; 
      this->buffer.clear(); 
     } 

    private: 
     string buffer; 
}; 

int main(int argc, char **argv, char** envp) { 
    outbuf cbout; 
    string s = " of the output buffer."; 

    cbout << "This is "; 
    cbout << "a test" << " ..."; 
    cbout << s; 

    cbout.obsend(); 

    return 0; 
} 

問題は二オペレータ、コンパイラにcbout << "a test" << " ...";が付属しています文句を言っています。invalid operands of types 'void' and 'const char [5]' to binary 'operator<<'私はこのエラーを理解していますが、何をすべきかはわかりません。私がやろうとしていることを達成するためのよりよい方法はありますか? This articleは有望に見えましたが、彼が話していることのいくつかを理解することができず、私がしようとしているものに正確に合うようには見えません。

答えて

1

あなたoperator<<過負荷は、単に自分自身への参照を返す必要があります:

outbuf &operator<<(const char *str) { 

// ... 

    return *this; 
} 

だから今最初<<オペレータの結果が第二は、チェーン、<<オペレータは喜んで使用しますそれに対して同じオブジェクト、です。

すべての<<オペレータをこのように変更してください。

+0

驚くばかり!魅力のように動作します。ありがとう! – alanlittle

関連する問題