2012-12-18 40 views
6

Tôi cần chuyển giá trị của một đại lượng vào thư viện để đánh giá. Các boost units library có giá trị gấp đôi trong SI, do đó, các thư viện đơn vị tăng là rất hấp dẫn trong việc đảm bảo rằng yêu cầu. Tuy nhiên, làm thế nào tôi nên đúc số lượng với một giá trị gấp đôi? Các tài liệu và ví dụ dường như để tránh điều này vì mục đích là, đúng như vậy, duy trì các đơn vị.Đúc tăng :: đơn vị :: số lượng để tăng gấp đôi

Cái gì như:

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

Đi qua các tiêu đề gợi ý ... Đó có phải là cách chính xác để đúc các loại cơ sở?

p.value(); 
+1

"Đi qua các tiêu đề đề nghị ...' p.value() '" Vì vậy, câu hỏi của bạn là gì? –

+0

Điểm tốt - xin lỗi tôi đã thêm rằng sau khi câu hỏi được hỏi lần đầu tiên. Điều tôi muốn đảm bảo là .value() trả lại những gì tôi mong đợi một cách đáng tin cậy. Tức là, sau khi có bất kỳ chuyển đổi cần thiết nào như psi sang Pa? – ccook

Trả lời

3

Các reference documentation cho thấy rằng một trong hai diễn viên tiềm ẩn hoặc các phương pháp value() thành viên có thể được sử dụng.

  1. operator value_type() const;

    chuyển đổi ngầm để VALUE_TYPE được phép

  2. const value_type & value() const;

    accessor liên tục để đánh giá

+0

Cảm ơn bạn, tài liệu tham khảo đó rất hữu ích (và khó có thể tìm thấy với việc tăng số lượng đơn vị từ khóa) – ccook

+0

'toán tử value_type() const;' chỉ tồn tại cho các số lượng không thứ nguyên. Nếu không, điều này có thể là: 'double v = quantity ()'. – alfC

8

Tôi nghĩ rằng những gì bạn đang tìm kiếm này là:

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

Nếu bạn chia ra các đơn vị, bạn là trái với một quantity<dimensionless> mà ngầm sẽ chuyển đổi sang một double. Điều này giúp loại bỏ bất kỳ câu hỏi nào về biểu diễn bên trong (đơn vị trả về là value()).

Các vấn đề liên quan