boost :: iostreams :: counter似乎不起作用

时间:2012-11-23 07:51:11

标签: c++ boost iostream

我正在玩boost :: iostreams,用户指南谈论过滤器“counter”。所以我尝试使用这段代码:

#include <iostream>
#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/device/null.hpp>
#include <boost/iostreams/filter/counter.hpp>
namespace io = boost::iostreams;
int main()
{
    io::counter cnt;
    io::filtering_ostream out(cnt | io::null_sink());
    out << "hello";
    std::cout << cnt.lines() << " " << cnt.characters() << std::endl;
}

总是给出

0 0

这似乎不是我所期待的。 使用gdb的初步跟踪表明正在进行计数的计数器对象具有与对象'cnt'不同的地址。我想这是管道中的某种复制?如果是这种情况,如何过滤“计数器”有什么用?

1 个答案:

答案 0 :(得分:1)

查看the documentation,您可以使用:

#include <iostream>
#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/device/null.hpp>
#include <boost/iostreams/filter/counter.hpp>
namespace io = boost::iostreams;
int main()
{
    io::counter cnt;
    io::filtering_ostream out(cnt | io::null_sink());
    out << "hello";
    std::cout << out.component<io::counter>(0)->lines() << " " << out.component<io::counter>(0)->characters() << std::endl;
}

或:

#include <iostream>
#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/device/null.hpp>
#include <boost/iostreams/filter/counter.hpp>
#include <boost/ref.hpp>
namespace io = boost::iostreams;
int main()
{
    io::counter cnt;
    io::filtering_ostream out;
    out.push(boost::ref(cnt));
    out.push(io::null_sink());
    out << "hello";
    std::cout << cnt.lines() << " " << cnt.characters() << std::endl;
}