增加BOOST :: progress计时器的时间分辨率

时间:2013-06-28 16:19:44

标签: c++ boost

BOOST :: progress_timer是一个非常有用的类,用于衡量函数的运行时间。但是,progress_timer的默认实现不够准确,增加时间分辨率的一种可能方法是重建一个新类,如下面的代码所示:

#include <boost/progress.hpp>
#include <boost/static_assert.hpp>

template<int N=2>
class new_progress_timer:public boost::timer
{
public:
    new_progress_timer(std::ostream &os=std::cout):m_os(os)
    {
        BOOST_STATIC_ASSERT(N>=0 &&N<=10);
    }
    ~new_progress_timer(void)
    {
        try
        {
            std::istream::fmtflags old_flags =
                m_os.setf(std::istream::fixed,std::istream::floatfield);
            std::streamsize old_prec = m_os.precision(N);
            m_os<<elapsed()<<"s\n"
                <<std::endl;

            m_os.flags(old_flags);
            m_os.precison(old_prec);

        }
        catch(...)
        {
        }

    }
private:
    std::ostream &m_os;

};

但是,当我使用VC10编译代码时,会出现以下错误:

 'precison' : is not a member of 'std::basic_ostream<_Elem,_Traits>' 

有什么想法吗?感谢。

1 个答案:

答案 0 :(得分:0)

我手边没有VC10进行测试,所以我只能做一些有根据的猜测。

precision() std::ostream的成员(源自std::ios_base), 所以唯一可能出错的是你用来调用它的签名: 它需要一个streamsize,您可以给它int

请尝试使用std::setprecision()。需要int

我认为std::ios_base::precision(streamsize)仅用于恢复之前更改的值。