簡體   English   中英

帶boost :: units的混合單位

[英]Mixed units with boost::units

在我的程序中,我想利用boost :: units進行類型安全的計算和自動轉換。 作為該庫的新手,我對它的工作原理以及為什么禁止隱式類型轉換有了基本的了解。

現在我可以寫這樣的代碼

using namespace boost::units;
using namespace boost::units::si;

quantity<mass> my_mass(50 * kilogram);
quantity<force> my_force = my_mass * 9.81 * meter / pow<2>(second);

my_mass將以千克表示, my_force將以牛頓表示。 但是為了方便起見,在與僅接受double其他庫進行交互時,我希望力以千牛頓為單位(並且類似地,以MegaPascal為單位施加壓力)。 所以我這樣做:

typedef make_scaled_unit<force, scale<10, static_rational<3>>>::type kiloforce;
quantity<kiloforce> scaled_force(my_mass * 9.81 * meter / pow<2>(second));

哪個可行,但強制進行顯式轉換。 正確地,以下代碼無法編譯:

quantity<kiloforce> scaled_force = my_mass * 9.81 * meter / pow<2>(second);

因為它表示隱式轉換。 那么我的問題是:有沒有一種方法可以配置庫,以使數量以選擇的縮放單位表示?

畢竟,“千克”就是這種情況,因此我研究了按比例縮放的單位 ,但似乎無法找到一種使之工作的方法。 這個想法會一直以定義一個定制的系統,但由於質量,力和壓力的相互關系,這是不可能的,因為解釋在這里

基本問題似乎是您正在尋找千牛頓的無量綱力。 不難

quantity<force> my_force = my_mass * 9.81 * meter / pow<2>(second);
double F = my_force / (kilo*newtons); // my_force in kN

物理問題似乎是“千力”。 那不是物理學的原理。 部隊沒有前綴,部隊沒有前綴。 例如,長度與米/公里的關系以及質量與克/千克的關系。 同樣,force vs Nnewton / kiloNewton。

話雖如此,我可以建議

make_scaled_unit<acceleration, scale<10, static_rational<3>>>::type g(0.00981);

不要問我,為什么用每秒平方千米的平方數來表示地球的加速度,但是千牛頓就是每秒平方千米的千公斤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM