これは私の以前の質問のようなものです: C ++:Vector3タイプ "wall"?
ただし、今は、ユーザーが作成したタイプではなく、組み込みのタイプに対してこれを実行したいと思います。
したがって、floatと同じように動作するタイプ「Length」が必要です。ただし、コンストラクターを明示的にすることを除いて、Lengthオブジェクトを明示的に構築する必要があります(ランダムな変換が飛び交うのではありません)。
基本的に、私はタイプ・ア・ロットのキャンプに入ります。
これは私の以前の質問のようなものです: C ++:Vector3タイプ "wall"?
ただし、今は、ユーザーが作成したタイプではなく、組み込みのタイプに対してこれを実行したいと思います。
したがって、floatと同じように動作するタイプ「Length」が必要です。ただし、コンストラクターを明示的にすることを除いて、Lengthオブジェクトを明示的に構築する必要があります(ランダムな変換が飛び交うのではありません)。
基本的に、私はタイプ・ア・ロットのキャンプに入ります。
他の質問のコメントで提案されているように、boost のユニットを使用できます。これは明示的で、なおかつ扱いやすいものでなければなりません。
独自のクラスで float プリミティブをラップしたいようです。開始するための例を次に示します。
class Length
{
protected:
float value_;
public:
Length(float value) : value_(value) { }
static Length operator +(Length a, Length b) { return Length(a.value_ + b.value_); }
static Length operator -(Length a, Length b) { return Length(a.value_ - b.value_); }
static Length operator *(Length a, Length b) { return Length(a.value_ * b.value_); }
static Length operator /(Length a, Length b) { return Length(a.value_ / b.value_); }
};
しかし、ブーストユニットライブラリを使用することは、長期的にははるかに良い選択です...