エポックからの経過時間を簡単に取得するために、次の Timer クラスがあります。
#include <chrono>
class Timer {
public:
void start(void);
template <typename duration_type>
const duration_type time_elapsed(void);
private:
std::chrono::high_resolution_clock::time_point epoch;
};
void Timer::start(void) {
epoch = std::chrono::high_resolution_clock::now();
}
template <typename duration_type>
const duration_type Timer::time_elapsed(void) {
return std::chrono::duration_cast<duration_type>(std::chrono::high_resolution_clock::now() - epoch);
}
int main(void) {
Timer timer;
timer.start();
// pointless loop to cause a delay
for (int x = 1; x < 1000000; ++x) {
x * x * x;
}
std::chrono::nanoseconds elapsed = timer.time_elapsed<std::chrono::nanoseconds>();
std::cout << elapsed.count() << std::endl;
return 0;
}
Timer::time_elapsed() をテンプレート関数にすることでクラスが複雑になりすぎていると感じており、理想的にはその使用法を次のように簡素化したいと考えています。
std::chrono::nanoseconds elapsed = timer.time_elapsed();
std::cout << elapsed.count() << std::endl;