std::chrono::durationは汎用的

std::chrono::durationはかなり柔軟なライブラリなので時間ライブラリの枠組みに押し留めておくのはもったいない。


とりあえず、ミリメートル、キロメートル、インチ、フィートの変換で試してみました。

#include <iostream>
#include <chrono>
#include <ratio>

template<typename T> using milli_metre = std::chrono::duration<T, std::milli>;
template<typename T> using metre       = std::chrono::duration<T, std::ratio<1>>;
template<typename T> using kilo_metre  = std::chrono::duration<T, std::kilo>;

template<typename T> using inch = std::chrono::duration<T, std::ratio<254, 10000>>;
template<typename T> using feet = std::chrono::duration<T, std::ratio<3048, 10000>>;

int main() {
    milli_metre<long> a(10);
    kilo_metre<long> b(2);
    auto c = a + b;
    std::cout << c.count() << std::endl; // 2000010ミリメートル

    inch<float> d(1);
    feet<float> e(1);
    auto f = d + e;
    std::cout << f.count() << std::endl; // 13インチ

    auto g = std::chrono::duration_cast<milli_metre<float>>(d);
    std::cout << g.count() << std::endl; // 25.4ミリメートル

    auto h = std::chrono::duration_cast<metre<float>>(e);
    std::cout << h.count() << std::endl; // 0.3048メートル
}

一応期待通りに動いてますね。
精度とか細かいことはよくわかりませんが、手軽に変換したい場合にそれぞれ型が用意されていればけっこう便利かなーと。