- 



僅標頭C ++庫,可提供類型安全性和用戶定義的文字,以處理由國際重量與措施局(BIPM)監管的國際單位系統定義的物理價值(BIPM)(BIPM),並在SI小冊子中出版。有關快速啟動,請參閱“安裝指南”。歡迎貢獻和評論,請檢查貢獻指南以獲取更多信息。
一個說明性的例子:
# include < SI/electric_charge.h >
# include < SI/mass.h >
using namespace SI ::literals ;
constexpr auto one_kilogram = 1 .0_kg;
constexpr auto ten_coulomb = 5 .0_A * 2 .0_s;
constexpr auto half_an_ampere = ten_coulomb / 20 .0_s;
constexpr auto thousand_grams = one_kilogram.as<SI:: gram_t >();
void calculate_mass ( const SI:: kilo_gram_t < long double > &kg) {
// do something meaningful here
}
int main ( int , char **) {
calculate_mass (one_kilogram);
return 0 ;
} SI提供了轉換和算術操作,並具有在編譯時具有強大安全性的任何國際單元系統的值。所有單元均為模板struct SI::unit_t的特殊打字。僅在內部存儲該單元的值,該比率(即milli,micro,kilo ...)被確定為類型特徵,以允許所有單元在整個實施比率上具有相同的分辨率。 SI處理相同比率的單位操作以及比率不同的何時。有關更多信息,請參見文檔實施詳細信息。相同比率單位之間的操作是無額外費用的,否則還有一個額外的計算成本來調整單位的值。將標誌SI_DISABLE_IMPLICIT_RATIO_CONVERSION傳遞到編譯器隱式比率轉換尚未完成,並且在編譯器錯誤時失敗。請參閱參考測量結果與SI中的實現之間的連續基準結果。
可以提供與內置類型的自定義比率,並且它們與其他單元完全兼容。但是,用戶必須提供必要的文字或類型。例如SI::velocity_t<double, std::ratio<1000, 36>>將是“公里每百分之一十分之一的時間”。
單位之間的轉換是使用unit_的as<unit_t>()成員函數完成的,或者是免費函數SI::unit_cast<unit_t>(unit_t u) 。這將轉換相同類型的值,但比率不同。
對於每個單元,可用的文字是以下劃線為前綴的實現比率。即_mm 。 _km 。通常,與標準度量前綴相結合(或在極少數情況下)的TYPEDEF與國際單位系統的度量前綴相結合。 ie metre_t, milli_metre_t, kilo_metre_t 。前綴或插子在下表中標有* 。可以使用流操作員或SI::to_string函數將定義打字和文字的單元轉換為字符串。要使用流操作員,請包括標題文件SI/stream.h
| 單元 | 維符號 | 單位符號 | 實施比率 | 單位Typedefs |
|---|---|---|---|---|
| 長度 | l | m | 10 -18至10 18 | *_metre_t |
| 時間 | t | s | 10 -18至10 0和60/1,3600/1 | *_seconds_t, minutes_t, hours_t |
| 大量的* | m | 公斤 | 10 -15至10 18 | *_gram_t , *_ton_t |
| 電流 | 我 | 一個 | 10 -18至10 18 | *_ampere_t |
| 熱力學溫度** | t | k | 10 -18至10 18 | *_kelvin_t |
| 物質量 | n | 摩爾 | 10 -18至10 18 | *_mol_t |
| 亮度 | j | 光碟 | 10 -18至10 18 | *_candela_t |
*對於質量,基本比為kg (不是g ),如SI單位表中所定義的。因此,文字前綴和內部表示之間存在不匹配。
**熱力學溫度的尺寸符號應為Θ (Theta) ,但是當前的實現不允許非ASCII符號或多char符號
| 單元 | 維符號 | 指數 | 單位符號 | 實施比率 | 單位Typedefs |
|---|---|---|---|---|---|
| 區域 | l | 2 | M2 | 10 -18至10 18 | square_*_metre_t |
| 體積 | l | 3 | M3 | 10 -18至10 18 | cubic_*_metre_t |
| 頻率 | t | -1 | 赫茲 | 10 -18至10 18 | *_hertz_t |
| 角度* | r | 1 | rad | 10 -18至1 | *_radian_t |
| 角度(度)** | r | 1 | 度 | Micro,Milli,1 | *_radian_t |
| 結合角* | r | 1 | Sr | 10 -18至1 | *_steradian_t |
*角度,角度(程度)和實體角度是簡單的容器,不包含執行角度/固體角度計算的任何功能,例如2* pi後的溢出。弧度和學位之間的轉換可能會失去精確度,尤其是在long doubles工作的情況下,因為比率不夠精確,因為必須將它們表示為長時間的ints
通過顛倒數學操作,可以從其他單位衰減到各個單元的所有單元。 IE如果Q = I * T則Q / I = T and Q / T = I
| 單元 | 維符號 | 單位符號 | 可從 | 實施文字 | 單位Typedefs |
|---|---|---|---|---|---|
| 速度 | v | 多發性硬化症 | l / t | m_p_s , km_p_h , _c | metre_per_second_t , kilometre_per_second_t , speed_of_light_t |
| 加速度 | 一個 | m/s^2 | v / t,v^2 / l | 沒有任何 | 沒有任何 |
| 電荷 | 問 | c | 它 | AC到EC | *_coulomb_t |
| 電位 | 你 | v | p / i,e / q | AV到EV | *_volt_t |
| 電阻 | o* | 歐姆(ω) | u / i,1 / g | aohm到eohm | *_ohm_t |
| 電導 | g | s | 我 / u,1 / r | 至於es | *_siemens_t |
| 電容 | c | f | 問 / u | AF到EF | *_farad_t |
| 力量 | f | n | m * a | an | *_newton_t |
| 壓力 | p | PA | f / l^2 | APA到EPA | *_pascal_t |
| 活力 | e | j | f * l,p * l^3 | AJ到EJ | *_joule_t |
| 力量 | p | w | E/t | 噢,到ew | *_watt_t |
| 磁通量 | F* | WB | u * t | AWB到EWB | *_weber_t |
| 磁場 | b | t | f/l^2 | 在ET | *_tesla_t |
| 勢頭 | o* | kg·m/s | m * v | 沒有任何 | 沒有任何 |
| 電感 | l | h | f / i | 啊,嗯 | *_henry_t |
| 發光的通量 | M* | LM | j * r | alm到榆樹 | *_lumen_t |
| 亮度 | 我* | Lx | m / a | alx到麋鹿 | *_lux_t |
| 放射性 | 一個 | BQ | ABQ到EBQ | *_becquerel_t | |
| 吸收劑量 | d | Gy | 對埃及 | *_gray_t | |
| 等效劑量 | h | SV | ASV到ESV | *_sievert_t | |
| 催化活性 | k | 凱特 | n / t | Akat到Ekat | *_katal_t |
| 表面流 | s | m^2/s | l^2 / t | 沒有任何 | |
| 體積流量 | v | m^3/s | l^3 / t | 沒有任何 | |
| 角頻率 | W* | rad/s | r / t | 沒有任何 |
*這些維度尚未具有正確的符號,因為當前的實現不允許非ASCII符號或多char符號。電阻的尺寸符號應為Ω (Ohm)和磁通量Φ (Phi) 。亮度應為b 。角速度應為ω(歐米茄)。發光通量應為φV ,其支撐甚至比Φ (Phi)本身更少。
非標准單元不受BIPM的調節,而是接受SI標準的使用。
| 單元 | 維符號 | 文字 | 實施比率 | 單位Typedefs |
|---|---|---|---|---|
| 長度的天文單位 | l | au,ly,pc | 149597870691:1(AU),94607307777119564:1(LY),30856775814913700:1(PC) | astronomic_unit_t ( _AU ), lightyear_t ( _ly ), parsec_t ( _pc ) |
SI是使用C ++ 17功能的僅標題庫。使用Cmake> 3.23對建築物進行了測試,並針對G ++ 7,G ++ 8,Clang5,Clang6,Clang6,Clang7,MSVC 19和Appleclang 10.0進行了驗證。我建議使用Conan 2.0下載任何依賴項進行測試,但是如果未構建測試,則可以在沒有它的情況下使用。
SI使用柯南的cmakedeps發電機來查找依賴關係。安裝依賴項使用
conan install . --output-folder=build --build=missing --settings=build_type=Debug替換--settings=build_type=Debug帶有--settings=build_type=Release 。
通過使用CMakedEPS生成器,您可以手動構建或使用提供的CMAKE預設。
cmake --preset=ci-ninja-debug
cmake --build buildSI的默認安裝位置是/usr/local/lib/SI 。可以使用RAW CMAKE,CPACK(CMAKE包裝機構)或作為CONAN.IO軟件包安裝SI
有關詳細說明,請參見“安裝指南”
注意:首選將SI作為柯南包。
要使用Cmake的提取器安裝,請在您的cmakelists.txt中添加以下內容
include (FetchContent)
FetchContent_Declare(
SI
GIT_REPOSITORY https://gitlab.com/bernedom/SI.git
# This will get the latest version
# To pin to a specific version or hash, add the version/hash here instead
# (e.g. 2.5.1 or 63b267211a6f256f7ba8d5a26e17138bbcf95ba8)
GIT_TAG main
)
FetchContent_MakeAvailable(SI)
# ...
# Link the library to your target. Change this as needed!
target_link_libraries ( ${PROJECT_NAME} PUBLIC SI::SI)SI可從此存儲庫中下載,也可以作為柯南包下載。從柯南中心獲得SI是首選的方式。
有關更多信息和更深入的技術詳細信息,請參閱實施詳細信息文檔
高於2.0.0的版本將與較舊版本完全兼容,因為ChangElog中提到的破壞變化。從Conan軟件包上的2.0.0版本中,命名為Lower Case si ,以符合Conan命名約定。