- 



مكتبة C ++ فقط التي توفر سلامة من النوع والأفنية المحددة للمستخدم للتعامل مع القيم المادية المحددة في النظام الدولي للوحدات التي ينظمها المكتب الدولي للأوزان والتدابير (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 التحويلات والعمليات الحسابية مع قيم أي من النظام الدولي للوحدات مع سلامة من النوع القوي في وقت الترجمة . جميع الوحدات هي typedefs الخاصة من القالب struct SI::unit_t . يتم تخزين قيمة الوحدة فقط داخليًا ، يتم تحديد نسبة (أي Milli ، Micro ، Kilo ...) كسمات نوع للسماح لجميع الوحدات بالحصول على نفس الدقة عبر النسب التي تم تنفيذها بأكملها. يعالج SI عمليات وحدات من نفس النسب وكذلك عندما تكون النسب مختلفة. راجع تفاصيل تنفيذ الوثائق لمزيد من المعلومات. العمليات بين وحدات نفس النسبة خالية من النفقات العامة ، وإلا توجد تكلفة حساب إضافية لضبط القيم على الوحدات. لا يتم تمرير العلم SI_DISABLE_IMPLICIT_RATIO_CONVERSION إلى تحويل النسبة الضمنية للمترجم ويفشل مع خطأ في المترجم. راجع نتائج القياس المستمر للمقارنة بين القياسات المرجعية والتنفيذ في SI.
من الممكن توفير نسب مخصصة للأنواع المدمجة وهي متوافقة تمامًا للحساب مع وحدات أخرى. ومع ذلك ، يجب توفير الحرفية الضرورية أو typedefs من قبل المستخدم. على سبيل المثال SI::velocity_t<double, std::ratio<1000, 36>> ستكون "كيلومتر الواحد لكل مائة من الساعة".
يتم التحويل بين الوحدات إما باستخدام وظيفة العضو as<unit_t>() في unit_ أو الدالة المجانية SI::unit_cast<unit_t>(unit_t u) . سيؤدي ذلك إلى تحويل قيمة من نفس النوع ولكن نسبة مختلفة.
بالنسبة لكل وحدة ، فإن النسب الحرفية المتاحة هي النسب التي تم تنفيذها مسبوقة مع السطحية السفلية. أي _mm . _km . بشكل عام ، تتبع النسب البادئات المترية للنظام الدولي للوحدات ، يتم تسبق typedefs (أو في حالات نادرة متداخلة) مع البادئات المترية القياسية. ie metre_t, milli_metre_t, kilo_metre_t . يتم وضع علامة على البادئة أو interfix مع * في الجداول أدناه. يمكن تحويل الوحدات التي حددت typedefs والغراء إلى سلاسل باستخدام مشغلي الدفق أو وظيفة SI::to_string . لاستخدام مشغلي الدفق ، قم بتضمين ملف الرأس SI/stream.h
| وحدة | رمز البعد | رمز الوحدة | النسب المنفذة | وحدة typedefs |
|---|---|---|---|---|
| طول | ل | م | 10-18 إلى 10 18 | *_metre_t |
| وقت | ر | ق | 10 -18 إلى 10 0 و 60/1 ، 3600/1 | *_seconds_t, minutes_t, hours_t |
| كتلة* | م | كجم | 10 -15 إلى 10 18 | *_gram_t ، *_ton_t |
| التيار الكهربائي | أنا | أ | 10-18 إلى 10 18 | *_ampere_t |
| درجة الحرارة الديناميكية الحرارية ** | ر | ك | 10-18 إلى 10 18 | *_kelvin_t |
| مقدار المادة | ن | مول | 10-18 إلى 10 18 | *_mol_t |
| اللمعان | ي | قرص مضغوط | 10-18 إلى 10 18 | *_candela_t |
* بالنسبة للكتلة ، تكون نسبة القاعدة kg (وليس g ) كما هو محدد في جدول وحدة SI. لذلك هناك عدم تطابق بين البادئة الحرفية والتمثيل الداخلي.
** يجب أن يكون رمز البعد لدرجة الحرارة الديناميكية الحرارية Θ (Theta) ، لكن التنفيذ الحالي لا يسمح برموز غير ASCII أو رموز متعددة
| وحدة | رمز البعد | الأسس | رمز الوحدة | النسب المنفذة | وحدة typedefs |
|---|---|---|---|---|---|
| منطقة | ل | 2 | M2 | 10-18 إلى 10 18 | square_*_metre_t |
| مقدار | ل | 3 | M3 | 10-18 إلى 10 18 | cubic_*_metre_t |
| تكرار | ر | -1 | هرتز | 10-18 إلى 10 18 | *_hertz_t |
| زاوية* | ص | 1 | راد | 10 -18 إلى 1 | *_radian_t |
| زاوية (درجات)* | ص | 1 | درجة | Micro ، Milli ، 1 | *_radian_t |
| زاوية صلبة* | ص | 1 | ريال | 10 -18 إلى 1 | *_steradian_t |
* الزاوية ، الزاوية (درجة) وزاوية الصلبة هي حاويات بسيطة ، لا تحتوي على أي وظيفة للقيام بحساب الزاوية/الزاوية الصلبة مثل الفائض بعد 2* PI. قد يفقد التحويل بين الراديان والدرجة الدقة ، خاصة إذا كان العمل مع long doubles لأن النسب ليست دقيقة بما فيه الكفاية ، حيث يجب تمثيلها منذ فترة طويلة
جميع الوحدات التي يمكن بناؤها من وحدات أخرى تتحلل إلى الوحدات المعنية من خلال قلب العملية الرياضية. أي إذا Q = I * T ثم Q / I = T و Q / T = I
| وحدة | رمز البعد | رمز الوحدة | قابلة للبناء من | تنفذ الحرفيين | وحدة typedefs |
|---|---|---|---|---|---|
| سرعة | الخامس | آنسة | ل / ر | 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 | لا أحد | لا أحد |
| شحنة كهربائية | س | ج | هو - هي | AC إلى EC | *_coulomb_t |
| إمكانات كهربائية | ش | الخامس | P / I ، E / Q | AV إلى EV | *_volt_t |
| مقاومة كهربائية | س* | أوم (ω) | u / i ، 1 / g | aohm إلى eohm | *_ohm_t |
| التوصيل الكهربائي | ز | ق | أنا / ش ، 1 / ص | بالنسبة إلى ES | *_siemens_t |
| القدرة الكهربائية | ج | و | س / ش | AF إلى EF | *_farad_t |
| قوة | و | ن | م * أ | ل | *_newton_t |
| ضغط | ص | السلطة الفلسطينية | f / l^2 | APA إلى EPA | *_pascal_t |
| طاقة | ه | ي | f * l ، p * l^3 | AJ إلى EJ | *_joule_t |
| قوة | ص | ث | ه/ر | AW إلى EW | *_watt_t |
| تدفق مغناطيسي | و* | WB | ش * ر | AWB إلى EWB | *_weber_t |
| المجال المغنطيسي | ب | ر | f/l^2 | في إلى ET | *_tesla_t |
| دَفعَة | س* | kg⋅m/s | م * ضد | لا أحد | لا أحد |
| الحث | ل | ح | f / i | آه إلى إيه | *_henry_t |
| تدفق مضيئة | م* | LM | ي * ص | ALM إلى الدردار | *_lumen_t |
| اللوم | أنا* | LX | م / أ | alx إلى elx | *_lux_t |
| النشاط الإشعاعي | أ | BQ | ABQ إلى EBQ | *_becquerel_t | |
| جرعة ممتصة | د | يا | أجي إلى egy | *_gray_t | |
| جرعة مكافئة | ح | SV | ASV إلى ESV | *_sievert_t | |
| النشاط الحفاز | ك | كات | ن / ر | أكات إلى إيكات | *_katal_t |
| تدفق السطح | ق | م^2/ثانية | ل^2 / ر | لا أحد | |
| تدفق الحجمي | الخامس | م^3/ثانية | ل^3 / ر | لا أحد | |
| التردد الزاوي | ث* | rad/s | ص / ر | لا أحد |
* لا تحتوي هذه الأبعاد بعد على الرموز الصحيحة ، لأن التنفيذ الحالي لا يسمح برموز غير ASCII أو الرموز المتعددة. يجب أن يكون رمز البعد للمقاومة الكهربائية Ω (Ohm) وللتدفق المغناطيسي Φ (Phi) . يجب أن يكون النصوع ه ب . يجب أن تكون السرعة الزاوية ω (أوميغا). يجب أن يكون التدفق المضيء φ v وهو أقل دعمًا من Φ (Phi) نفسه.
لا يتم تنظيم الوحدات غير القياسية بواسطة BIPM ولكن يتم قبولها للاستخدام مع معيار SI.
| وحدة | رمز البعد | حرفي | النسب المنفذة | وحدة typedefs |
|---|---|---|---|---|
| وحدات الفلك من الطول | ل | Au ، ly ، الكمبيوتر | 149597870691: 1 (AU) ، 9460730777119564: 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 و 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 with --settings=build_type=Release للتبديل بين التصحيح والبناء.
باستخدام مولد Cmakedeps ، يمكنك إما بناء يدويًا أو استخدام الإعدادات المسبقة Cmake المقدمة.
cmake --preset=ci-ninja-debug
cmake --build build موقع التثبيت الافتراضي لـ SI IS /usr/local/lib/SI . يمكن تثبيت Si باستخدام Cmake Raw أو Cpack (آلية حزمة Cmakes) أو كحزمة Conan.io المقدمة من مركز كونان
انظر دليل التثبيت للحصول على إرشادات مفصلة
ملاحظة: يفضل الحصول على SI كحزمة Conan.
للتثبيت باستخدام Cmake's Fetchcontent ، أضف ما يلي إلى 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 كـ "Raw" تنزيل من هذا المستودع ولكن أيضًا كحزمة Conan. الحصول على SI من Conan-Center هو الطريقة المفضلة.
لمزيد من المعلومات والتفاصيل الفنية الأعمق ، يرجى الرجوع إلى وثيقة تفاصيل التنفيذ
لن تكون الإصدارات المذكورة أعلاه 2.0.0 متوافقة تمامًا مع الإصدارات القديمة بسبب التغيرات المكسورة المذكورة في Changelog. من الإصدار 2.0.0 على حزمة Conan يسمى si Lower Case SI لتتوافق مع اتفاقية التسمية Conan.