码迷,mamicode.com
首页 > 其他好文 > 详细

扩展progress_timer的计时精度

时间:2016-11-19 23:45:18      阅读:320      评论:0      收藏:0      [点我收藏+]

标签:gre   编写   stream   void   实现   精度   编程   小数点   bsp   

 progress对外输出精度只有小数点后两位(这点可以运行上节程序进行验证),即精确到0.01秒。

我们使用模板技术仿造一个progress_timer编写一个新类:new_progress_timer,以实现任意精度的输出。

 new_progress_timer同样继承自timer,只是编程了模板类。模板参数N指明了输出精度,默认值为2,与progress_timer相同。

#include <boost\timer.hpp>
#include  <boost\progress.hpp>
#include <boost\static_assert.hpp>
#include <iostream>
using namespace boost;
using namespace std;

//使用模板参数实现progress_timer
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.precision(old_prec);

        }
        catch( ...)
        {
        }
    }

private:
    std::ostream &m_os;
};

//当精度为2时,使用下面这个

template<>
class new_progress_timer<2>:public boost::progress_timer
{};

int main()
{
     new_progress_timer<10>     t;  //声明一个计时器,开始计时
   //dosomething
    for(int i=0;i<100;i++)
    {
        cout<<"a";
    }
    cout<<endl;
}

 

扩展progress_timer的计时精度

标签:gre   编写   stream   void   实现   精度   编程   小数点   bsp   

原文地址:http://www.cnblogs.com/zzu-liulei/p/6081673.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!