progress對外輸出精度只有小數點後兩位(這點能夠運行上節程序進行驗證),即精確到0.01秒。ios
咱們使用模板技術仿造一個progress_timer編寫一個新類:new_progress_timer,以實現任意精度的輸出。編程
new_progress_timer一樣繼承自timer,只是編程了模板類。模板參數N指明瞭輸出精度,默認值爲2,與progress_timer相同。spa
#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; }