可搜索的输入过滤器定义

时间:2016-04-03 15:06:42

标签: c++ boost input-filter

使用boost,我需要一个可搜索的输入过滤器,它将对从ifstream读取的字节进行操作。这就是我目前所拥有的:

struct my_filter : boost::iostreams::seekable_filter
{
    template<typename Source>
    int get(Source& src)
    {
        int byte = boost::iostreams::get(src);
        if(byte != EOF && byte != boost::iostreams::WOULD_BLOCK)
        {
            // Do something with byte
        }
        return byte;
    }

    template<typename Sink>
    bool put(Sink&, char)
    {
        // No need to actually implement put because this filter is only used with ifstream
        return true;
    }

    template<typename T>
    std::streampos seek(T& t, boost::iostreams::stream_offset off, std::ios_base::seekdir way, std::ios_base::openmode which = std::ios_base::in | std::ios_base::out)
    {
        return boost::iostreams::seek(t, off, way, which);
    }
};

它有效,但我想摆脱无用的put方法。这里的boost文档http://www.boost.org/doc/libs/1_60_0/libs/iostreams/doc/concepts/filter.html表示有一个InputSeekableFilter Filter的改进,但我似乎无法理解如何使用它(没有我可以使用的input_seekable_filter_tag或input_seekable_filter结构)。

1 个答案:

答案 0 :(得分:1)

llonesmiz对boost-users的回答:

  

&#34;升压::输入输出流:: seekable_filter&#34;似乎只是一个typedef   &#34;升压::输入输出流::滤波器<boost::iostreams::input_seekable&GT;&#34 ;.我不知道   当然,但我认为派生你的&#34;结构是有意义的   my_filter&#34;从   &#34;升压::输入输出流::滤波器[![sliderInput("capacity", "Growth Rate in Volume:", min=-100, max=100, value=0,post="%")][1]][1] &GT;&#34;将   完成你想要的。