将原始字节写入iostream

时间:2015-03-12 10:24:48

标签: c++ pointers operators iostream

我最近正在处理我的自定义缓冲区和流,并且因为我无法从指向iostream的指针调用我的流的行为而陷入困境。

template <int N>
std::iostream& myStream::operator<<(char (&rhs) [N])
{
    write(rhs, N);
    return *this;
}

myStream* pS = new myStream();
std::iostream& s = *pS;
char buf[5] = "ABCD";
s << buf;

我已经在课堂上覆盖了operator<<,但是,正如我想象的那样iostream operator<<应该是virtual才能实现这一目标工作,对吗?有没有办法解决这个问题?

EDIT2:

测试std::ostream::operator<<的代码,ibuf是一个可变向量,溢出方法,如上所列。

int ByteBuffer::overflow(int c) {
    std::vector<char>* buf = ibuf__;
    buf->resize(buf->capacity() * 2.5);
    std::ptrdiff_t putDiff = pptr() - pbase();
    setp(buf->data(), buf->data() + putDiff, buf->data() + buf->capacity());
    if (c != EOF)
        return sputc(c);
    return -1;
}

mutable std::vector<char>* ibuf__;

int main(int argc, char** argv) {
    ByteBuffer bb;
    iostream s(&bb);

    char buf[4] = { 'A', 'B', 'C', 'D' };
    s << buf;
    s << buf << (char)0;
    return 0;
}

结果我可以看到ibuf在缓冲区内有"ABCD!@#$ABCD!@#$",其中!@#$代表随机字符序列(但在ABCD之后&#39; s&#39} 39; s相同的序列)。这就是我假设的原因,它寻求'\0'

0 个答案:

没有答案