Declarations
template <int N, int D = 1> class unit; template <class Unit> Unit unit_cast(double x); typedef unit<1, 1000000000> nano; typedef unit<1, 1000000> micro; typedef unit<1, 1000> milli; typedef unit<1, 100> centi; typedef unit<1, 10> deci; typedef unit< 10, 1> deca; typedef unit< 100, 1> hecto; typedef unit< 1000, 1> kilo; typedef unit< 1000000, 1> mega; typedef unit<1000000000, 1> giga; typedef unit<8, 1> byte;
Overview
unit は,単位を定義するためのクラスです.N/D という形で, その単位の基準となる値を保持します.unit クラスのインスタンスを参照すると, 基準となる値に変換した後の値を取得することができます.一方,value() メソッドは, その単位で変換された値を返します.例えば,byte クラスを下記のように使用した場合, filesize は 512 * 8,filesize.value() は 512 を返します.
clx::byte filesize(512)
unit クラスは,ある単位で表された値を基準となる値に変換するためのクラスです. この逆変換(基準となる値からある単位で表された値への変換)を行う場合は,unit_cast を使用します.
Example
#include <iostream> #include "clx/unit.h" int main(int argc, char* argv[]) { std::cout << clx::nano(1) << ", "; std::cout << clx::micro(1) << ", "; std::cout << clx::milli(1) << ", "; std::cout << clx::kilo(1) << ", "; std::cout << clx::mega(1) << ", "; std::cout << clx::giga(1) << std::endl; std::cout << "2M + 34k = " << clx::mega(2) + clx::kilo(34) << std::endl; // 時間単位の入力値の合計を秒単位で出力 typedef clx::unit<3600> hour; hour sum; for (int i = 0; i < 10; i++) sum += i; std::cout << sum.value() << " hours -> " << sum << " seconds" << std::endl; // 分->時間単位への変換 typedef clx::unit<60> minute; minute minutes(1440); hour test = clx::unit_cast<hour>(minutes); std::cout << minutes.value() << " minutes -> " << test.value() << " hours" << std::endl; return 0; }
Result 1e-09, 1e-06, 0.001, 1000, 1e+06, 1e+09 2M + 34k = 2.034e+06 45 hours -> 162000 seconds 1440 minutes -> 24 hours
Template Parameters
- N
- 単位の基準値を分数で表したときの分子の値を指定します.
- D
- 単位の基準値を分数で表したときの分母の値を指定します.デフォルト値は,1.
Related Types
typedef unsigned int uint_t;
Construction and Member Functions
explicit unit(double x = 0.0); double value() const; operator double () const;
value() メソッドは,インスタンスが保持している値をその単位で表した場合の値を返します. これに対して,インスタンス自体を参照した場合は,基準となる値に変換した値を返します.
Operators
unit& operator=(double x); unit& operator+=(double x); unit& operator-=(double x); unit& operator*=(double x); unit& operator/=(double x);
いずれの演算子も引数に指定する値は,そのクラスで定義された単位で表された値である必要があります.