
mp-units - Pustaka Jumlah dan Unit untuk C ++Perpustakaan MP-Units mungkin menjadi subjek standardisasi ISO untuk C ++ 29. Lebih lanjut tentang ini dapat ditemukan dalam proposal ISO C ++ berikut:
Kami secara aktif mencari pesta yang tertarik untuk mengadili perpustakaan.
Pengantar singkat untuk antarmuka perpustakaan dan alasan untuk perubahan dalam versi 2.0 unit MP disediakan secara rinci oleh Mateusz Pusz dalam "Kekuatan Templat C ++ dengan MP-Unit: Pelajaran yang Dipetik & Desain Perpustakaan Baru" berbicara di konferensi C ++ pada Konferensi Laut 2023.
Dokumentasi proyek yang luas dapat ditemukan di halaman MP-Unit GitHub. Ini termasuk instruksi instalasi dan panduan pengguna terperinci.
Proyek ini menggunakan kosa kata metrologi resmi yang ditentukan oleh ISO dan BIPM. Harap biasakan diri Anda dengan istilah-istilah itu untuk lebih memahami dokumentasi dan meningkatkan komunikasi dan diskusi terkait domain. Anda dapat menemukan definisi penting terkait proyek dalam bab "Glosarium" dokumentasi kami. Bahkan lebih banyak persyaratan disediakan dalam kosakata resmi ISO dan BIPM.
mp-units adalah perpustakaan C ++ modern yang diaktifkan dengan waktu yang menyediakan analisis dimensi kompilasi dan manipulasi unit/kuantitas.
Berikut adalah contoh kecil dari kemungkinan operasi:
# include < mp-units/systems/si.h >
using namespace mp_units ;
using namespace mp_units ::si::unit_symbols ;
// simple numeric operations
static_assert ( 10 * km / 2 == 5 * km);
// conversions to common units
static_assert ( 1 * h == 3600 * s);
static_assert ( 1 * km + 1 * m == 1001 * m);
// derived quantities
static_assert ( 1 * km / ( 1 * s) == 1000 * m / s);
static_assert ( 2 * km / h * ( 2 * h) == 4 * km);
static_assert ( 2 * km / ( 2 * km / h) == 1 * h);
static_assert ( 2 * m * ( 3 * m) == 6 * m2);
static_assert ( 10 * km / ( 5 * km) == 2 * one);
static_assert ( 1000 / ( 1 * s) == 1 * kHz);Cobalah di Compiler Explorer.
Perpustakaan ini sangat menggunakan fitur C ++ 20 (konsep, kelas sebagai NTTPS, ...). Berkat mereka, pengguna mendapatkan antarmuka yang kuat tetapi masih mudah digunakan dan semua konversi unit dan analisis dimensi dapat dilakukan tanpa mengorbankan kinerja runtime atau akurasi. Silakan lihat contoh di bawah ini untuk pratinjau cepat fitur perpustakaan dasar:
# include < mp-units/format.h >
# include < mp-units/ostream.h >
# include < mp-units/systems/international.h >
# include < mp-units/systems/isq.h >
# include < mp-units/systems/si.h >
# include < format >
# include < iomanip >
# include < iostream >
# include < print >
using namespace mp_units ;
constexpr QuantityOf<isq::speed> auto avg_speed (QuantityOf<isq::length> auto d,
QuantityOf<isq::time> auto t)
{
return d / t;
}
int main ()
{
using namespace mp_units ::si::unit_symbols ;
using namespace mp_units ::international::unit_symbols ;
constexpr quantity v1 = 110 * km / h;
constexpr quantity v2 = 70 * mph;
constexpr quantity v3 = avg_speed ( 220 . * isq::distance[km], 2 * h);
constexpr quantity v4 = avg_speed ( isq::distance ( 140 . * mi), 2 * h);
constexpr quantity v5 = v3. in (m / s);
constexpr quantity v6 = value_cast<m / s>(v4);
constexpr quantity v7 = value_cast< int >(v6);
std::cout << v1 << ' n ' ; // 110 km/h
std::cout << std::setw ( 10 ) << std::setfill ( ' * ' ) << v2 << ' n ' ; // ***70 mi/h
std::cout << std::format ( " {:*^10} n " , v3); // *110 km/h*
std::println ( " {:%N in %U of %D} " , v4); // 70 in mi/h of LT⁻¹
std::println ( " {::N[.2f]} " , v5); // 30.56 m/s
std::println ( " {::N[.2f]U[dn]} " , v6); // 31.29 m⋅s⁻¹
std::println ( " {:%N} " , v7); // 31
}Cobalah di Compiler Explorer.