当前位置:  开发笔记 > 编程语言 > 正文

创造一个ostream

如何解决《创造一个ostream》经验,为你挑选了1个好方法。

我出于教育原因试图创建一个c ++ ostream.我的测试将创建一个像流一样的ostream,除了写入一个文件,它将写入双端队列或向量容器.



1> Johannes Sch..:

就像你说的那样,我会告诉你我将如何做这样的事情.否则,stringstream真的是要走的路.

听起来你想要创建一个streambuf实现,然后写入vector/deque.像这样的东西(从我的另一个回答中复制,目标是/ dev/null流):

template,
         typename Sequence = std::vector >
struct basic_seqbuf : std::basic_streambuf {
     typedef std::basic_streambuf base_type;
     typedef typename base_type::int_type int_type;
     typedef typename base_type::traits_type traits_type;

     virtual int_type overflow(int_type ch) {
         if(traits_type::eq_int_type(ch, traits_type::eof()))
             return traits_type::eof();
         c.push_back(traits_type::to_char_type(ch));
         return ch;
     }

    Sequence const& get_sequence() const {
        return c;
    }
protected:
    Sequence c;
};

// convenient typedefs
typedef basic_seqbuf seqbuf;
typedef basic_seqbuf wseqbuf;

你可以像这样使用它:

seqbuf s;
std::ostream os(&s);
os << "hello, i'm " << 22 << " years old" << std::endl;
std::vector v = s.get_sequence();

如果你想要一个deque作为序列,你可以这样做:

typedef basic_seqbuf< char, char_traits, std::deque > dseq_buf;

或类似的东西......好吧,我没有测试过它.但也许这也是一件好事 - 所以如果它仍然包含bug,你可以尝试修复它们.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有