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>'
何か案は?ありがとう。