我正在使用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的功能模板可用,否则调用将失败。

09-08 11:40