2012-12-18 3 views
6

評価のために数量の値をライブラリに渡す必要があります。 boost units libraryはSIでは2倍の値をとるため、ブーストユニットライブラリはその要件を確実にするのに非常に魅力的です。しかし、私は量を二重の値にキャストすべきですか?マニュアルや例は、これを避けているように見える。なぜなら、正当にはユニットを維持することが意図されているからである。以下のようなboost :: units :: quantityをdoubleにキャストする

何か:ヘッダを通って行く

quantity<pressure> p(101.1 * kilo * pascals); 
double dblP = static_cast<double>(p); // double value in Pascals 

は示唆...正しい方法は、基本型にキャストすることですか?

p.value(); 
+1

"ヘッダを通って行くが...' p.valueを() '示唆しますか"? –

+0

良い点 - 申し訳ありませんが、最初に質問をした後に追加しました。私が保証したいのは.value()が私が期待しているものを確実に返すということです。つまり、psiからPaのような必要な変換が行われた後ですか? – ccook

答えて

3

reference documentationは暗黙キャスト又はvalue()部材方法のいずれかを使用することができることを示しています。 VALUE_TYPEする

  1. operator value_type() const;

    暗黙的な変換は、評価に

  2. const value_type & value() const;

    定数アクセッサを許可され

+0

ありがとうございました、その参考文献は非常に役に立ちます(キーワード量単位のブーストキャストで見つけるのは難しい) – ccook

+0

'演算子value_type()const;は無次元の量子のみに存在します。それ以外の場合、これは可能です: 'double v = quantity ()'。 – alfC

8

私が何を探していることはこれだと思う:

quantity<pressure> p(101.1 * kilo * pascals); 
double dblP = p/pascals; // double value in Pascals 

あなたがユニットを分割した場合、あなたは暗黙的にdoubleに変換されますquantity<dimensionless>が残されています。これにより、内部表現(value()が返す)の単位が何であるかという疑問が解消されます。

関連する問題