Timer.h:
class Timer
{
public:
void start();
void printTimeAndRestart(const char* msg);
};
namespace Timing { static Timer timer; }
Timer.cpp:
#ifdef DO_TIMING
//implementation
void Timer::start() { ... };
void Timer::printTimeAndRestart(const char* msg) { ... };
#else
//empty - do not do timing
void Timer::start() {};
void Timer::printTimeAndRestart(const char* /*msg*/) {};
#endif
タイマーは、次のようなさまざまなファイルで使用されます。
Timing::timer.start();
...
Timing::timer.printTimeAndRestart("Operation X took :");
アプリケーションが非常にパフォーマンスに敏感で、タイマーが頻繁に呼び出される場合、DO_TIMINGが定義されていないときに空のメソッドを呼び出すと、パフォーマンスに影響しますか?分離されたタイマーを実装するためのより良いオプションは何でしょうか(オン/オフするためにプロジェクト全体を再コンパイルする必要はありません)。これは、オフのときにパフォーマンスにまったく影響しません。
これまでのところ、次のようなマクロの定義しか考えられません。
#ifdef DO_TIMING
#define START_TIMING()
Timing::timer.start();
#endif
#else
#define START_TIMING()
#endif
そして、Timing :: timer.start();の代わりにそれらを使用します。しかし、それはそれらをオン/オフにするためにコード全体を再コンパイルする必要があります...