6

I need to pass the value of a quantity to a library for evaluation. The boost units library takes double values in SI, so the boost units library is very appealing in ensuring that requirement. However, how should I cast the quantity to a double value? The documentation and example seems to avoid this since the intent is to, rightfully so, maintain the units.

Something like:

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

Going through the headers suggests... Is that the correct way to cast to the base type?

p.value();
ccook
  • 5,869
  • 6
  • 56
  • 81
  • 1
    "Going through the headers suggests... `p.value()`" So your question is? – R. Martinho Fernandes Dec 18 '12 at 16:51
  • Good point - sorry I added that after the question was first asked. What I want to ensure is .value() does return what I expect reliably. Ie, is it after any needed conversions such as psi to Pa? – ccook Dec 18 '12 at 16:59

3 Answers3

9

I think what you're looking for is this:

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

If you divide out the unit, you are left with a quantity<dimensionless> which will implicitly convert to a double. This eliminates any question of what the internal representation (which value() returns) units are.

wjl
  • 7,519
  • 2
  • 32
  • 41
7

Just spotted this. I think the intended method is to use Boost's quantity_cast operator.

quantity<pressure> p(101.1 * kilo * pascals);
double dblP = quantity_cast<double>(p);

http://www.boost.org/doc/libs/1_55_0/doc/html/boost_units/Quantities.html#boost_units.Quantities.Quantity_Construction_and_Conversion

Alex Valavanis
  • 193
  • 1
  • 6
5

The reference documentation shows that either implicit casts or the value() member method can be used.

  1. operator value_type() const;

    implicit conversion to value_type is allowed

  2. const value_type & value() const;

    constant accessor to value

Louis Langholtz
  • 2,913
  • 3
  • 17
  • 40
R. Martinho Fernandes
  • 228,013
  • 71
  • 433
  • 510
  • Thank you, that reference is very helpful (and hard to find with keywords quantity unit boost cast) – ccook Dec 18 '12 at 17:02
  • `operator value_type() const;` only exists for dimensionless quantites. Otherwise this would be possible: `double v = quantity()`. – alfC Jul 27 '15 at 00:48