用于CGI程序的自定义输出缓冲区,运算符重载

时间:2017-02-02 16:36:19

标签: c++ cgi

我正在开发一个CGI应用程序,它需要在主体之前发送响应头,包括Content-Length,但当然这是未知的,直到主体完全形成。我可以使用一个字符串并连接,但我喜欢使用<<与cout一样的运算符,所以我创建了这个小类:

#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 个答案:

答案 0 :(得分:1)

您的operator<<重载应该只返回对自身的引用:

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

// ...

    return *this;
}

所以现在第一个<<运算符的结果是同一个对象,第二个链接的<<运算符将很乐意使用它。

将所有<<运算符更改为以这种方式工作。