频率可以被视为一个周期的持续时间。所以 20 Hz 可以被视为 0.05 秒。
Chrono 将全力支持。
您可能可以编写一个Hz 类型或频率模板,它与某些情况下的周期/持续时间相反。遗憾的是,在内部存储持续时间并不能很好地工作,因为以秒为单位的 int Hz 以秒为单位的持续时间是失败的。
template<
class Rep,
class Period = std::ratio<1>
>
struct frequency;
template<
class Rep,
std::intmax_t Num,
std::intmax_t Denom>
>
struct frequency<Rep, std::ratio<Num, Denom>>
{
// todo!
frequency& operator+=(const frequency& d);
frequency& operator-=(const frequency& d);
frequency& operator*=(const Rep& rhs);
frequency& operator/=(const Rep& rhs);
frequency& operator%=(const frequency& rhs);
Rep count() const;
friend frequency operator+(frequency lhs, frequency const& rhs);
friend frequency operator-(frequency lhs, frequency const& rhs);
friend frequency operator*(frequency self, Rep const& scalar);
friend frequency operator*(Rep const& scalar, frequency self);
friend frequency operator/(frequency self, Rep const& scalar);
friend frequency operator%(frequency lhs, Rep const& rhs);
friend frequency operator%(frequency lhs, frequency const& rhs);
friend bool operator==(frequency const& lhs, frequency const& rhs);
friend bool operator!=(frequency const& lhs, frequency const& rhs);
friend bool operator<=(frequency const& lhs, frequency const& rhs);
friend bool operator>=(frequency const& lhs, frequency const& rhs);
friend bool operator<(frequency const& lhs, frequency const& rhs);
friend bool operator>(frequency const& lhs, frequency const& rhs);
template<class ToFrequency>
friend ToFrequency duration_cast(frequency const& self);
// etc
};
template<class Rep>
using hertz = frequency<Rep>;
template<class T>
hertz<T> operator "" _hz(T t) {
return hertz<T>(std::move(t));
}
现在13_hz 是frequency<int, std::ratio<1,1>> 类型的对象。