我正在使用std::chrono
清理计时器类。除我似乎无法将duration_cast
应用于派生类外,其他所有事情都很顺利。好吧,我以不同的方式使它工作,但是我仍然想知道我错过了什么。
有关错误消息,请参见here。
#include <iostream>
#include <chrono>
typedef std::chrono::high_resolution_clock Clock;
class Milliseconds : public std::chrono::milliseconds
{
public:
typedef std::chrono::milliseconds Base;
typedef Base::rep Type;
using Base::Base;
};
inline Milliseconds::Type millisecondsSinceEpoch()
{
return std::chrono::duration_cast<Milliseconds::Base>(Clock::now().time_since_epoch()).count();
//duration_cast<Milliseconds> ERROR!
}
int main() {
using namespace std;
cout << millisecondsSinceEpoch() << endl;
return 0;
}
最佳答案
标准duration_cast
仅可用于转换为duration
的特殊化。 [time.duration.cast] / p1:
如果ToDuration
不是duration
的特化,则将签名从重载解析中删除(通过SFINAE或类似技术),并且除非另一个名为duration_cast
的功能模板可用,否则调用将失败。