생성자와 소멸자를 제외한 클래스의 모든 메서드에 대해 일종의 타이머를 '암시 적으로'추가하는 방법은 무엇입니까?클래스의 모든 메소드에 타이머를 추가하는 방법은 무엇입니까?
내가 클래스의 모든 메소드 지금 뭘하는지 :
void MyClass::SomeFunc()
{
cout << __PRETTY_FUNCTION__ <<endl;
boost::timer::cpu_timer timer;
//Some code
boost::timer::cpu_times elapsed = timer.elapsed();
cout << __PRETTY_FUNCTION__ << " : WALLCLOCK TIME: " << elapsed.wall/1e9 << " seconds" << endl;
}
내가 원하는 무엇 : 코드의이 두 부분의
void MyClass::SomeFunc()
{
//Some code
}
가정 동작은 동등해야한다. 당신이 산업을 찾고 있다면
#define FL FunctionLogger _(__PRETTY_FUNCTION__)
void MyClass::SomeFunc()
{
FL;
//Some code
}
: 이제
struct FunctionLogger {
FunctionLogger(const char* func)
: m_func(func)
{
cout << func <<endl;
}
~FunctionLogger() {
boost::timer::cpu_times elapsed = timer.elapsed();
GSULOG << m_func << " : WALLCLOCK TIME: " << elapsed.wall/1e9 << " seconds" << endl;
}
const char* m_func;
boost::timer::cpu_timer timer;
};
:
void MyClass::SomeFunc()
{
FunctionLogger _(__PRETTY_FUNCTION__);
//Some code
}
물론 만약 당신이 좋아하면 매크로
함수에 람다 (lambda)로 실행되도록 코드를 전달하는 것보다 훨씬 낫습니다. – NathanOliver
endl 대신 '\ n'을 사용하여 버퍼를 플러시하지 않도록주의 할 수 있습니다. – Jonas
@Jonas : 어쩌면,하지만 OP가 아닌 나에게 제안해야합니다. 그가 원하거나 플러시 할 필요가 있든 나는 전혀 모른다. 나는 방금 같은 행동을 반복했다. –