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