我正在开发一个类Timer
,其某些成员的类型为high_resolution_clock::time_point,其中time_point
定义为typedef chrono::time_point<system_clock> time_point;
此对象的默认值是什么?
我需要从以下几个方面了解这个价值:
Timer::Reset()
功能class Timer
{
void Start() { m_tpStop = high_resolution_clock::now(); }
void Stop() { m_tpStart = high_resolution_clock::now(); }
bool WasStarted() { /* TO-DO */ }
void Reset();
__int64 GetDuration();
high_resolution_clock::time_point m_tpStart;
high_resolution_clock::time_point m_tpStop;
};
那么,我是否可以仅通过查看成员Timer::WasStarted
来实施m_tpStart
?我不想为此目的添加布尔成员。
答案 0 :(得分:7)
那么,我可以通过仅查看成员m_tpStart来实现Timer :: WasStarted吗?
好吧,如果你定义了这样的不变量,那么m_tpStart
为零(纪元)当且仅当计时器被重置(未启动)时,它才是微不足道的。只需检查start是否为epoch以测试计时器是否已启动。
究竟如何设置一个时间点到epoch,似乎有点复杂 - 我想这就是你所指的“如何重置high_resolution_clock :: time_point ”。您需要复制 - 指定默认构造的时间点。
void Start() { m_tpStart = high_resolution_clock::now(); }
void Stop() {
m_tpStop = high_resolution_clock::now();
}
bool WasStarted() {
return m_tpStart.time_since_epoch().count(); // unit doesn't matter
}
void Reset() {
m_tpStart = m_tpStop = {};
}