[英]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.