2012-12-18 8 views
6

Muszę przekazać wartość pewnej ilości do biblioteki do oceny. boost units library ma podwójne wartości w SI, więc biblioteka jednostek boost jest bardzo atrakcyjna w zapewnieniu tego wymagania. Jak jednak odrzucić tę wartość do podwójnej wartości? Dokumentacja i przykład zdają się tego unikać, ponieważ celem jest, słusznie, utrzymanie jednostek.Zwiększenie liczby rzutów :: jednostki :: ilość podwójna

Coś jak:

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

Przechodzi nagłówkach sugeruje ... Czy to jest prawidłowy sposób oddać do typu bazowego?

p.value(); 
+1

"Przechodząc przez nagłówkach sugeruje ...' p.value() '" Więc pytanie brzmi? –

+0

Dobra uwaga - przepraszam, dodałem, że po pierwszym pytaniu zadałem pytanie. To, co chcę zapewnić, to .value() zwraca to, czego oczekuję niezawodnie. To znaczy, czy po jakichkolwiek potrzebnych konwersjach, takich jak psi do Pa? – ccook

Odpowiedz

3

reference documentation pokazuje, że zarówno ukryte odlewów lub metodą value() człon może być stosowany.

  1. operator value_type() const;

    ukryte konwersja do VALUE_TYPE pozostawia

  2. const value_type & value() const;

    stałe dostępowej do wartości

+0

Dziękuję, ten odnośnik jest bardzo pomocny (i trudny do znalezienia dzięki słowom kluczowym zwiększenie liczby jednostek) – ccook

+0

'operator value_type() const;' istnieje tylko dla bezwymiarowych danych ilościowych. W przeciwnym razie byłoby to możliwe: 'double v = quantity ()'. – alfC

8

myślę co szukasz to:

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

Jeśli podzielić się jednostkę, jesteś lewej quantity<dimensionless> która niejawnie przekonwertować do double. Eliminuje to wszelkie pytania dotyczące reprezentacji wewnętrznej (która zwraca jednostki).