سؤال

منذ أن بدأت باستخدام هذا الموقع، أسمع باستمرار عن مكتبة Boost.أتساءل ما هي بعض المزايا الرئيسية لمكتبة Boost (وبالتالي لماذا يجب أن أستخدمها) وما مدى سهولة حمل مكتبة Boost؟

هل كانت مفيدة؟

المحلول

يتم تنظيم Boost من قبل العديد من أعضاء لجنة المعايير.
لذلك فهي أرض خصبة للمكتبات التي ستكون في المستوى التالي.

  1. إنه امتداد للمحكمة الخاصة بلبنان (يملأ البتات المتروكة)
  2. لقد تم توثيقه جيدًا.
  3. لقد تمت مراجعته بشكل جيد من قبل الأقران.
  4. إنه ذو نشاط عالي لذلك يتم العثور على الأخطاء وإصلاحها بسرعة.
  5. إنها منصة محايدة وتعمل في كل مكان.
  6. فهو حر في استخدامها.

مع ظهور tr1 قريبًا، من الجيد أن نعرف أن Boost قد تم بالفعل تغطية الكثير من الأرض.تم تكييف الكثير من المكتبات في tr1 بشكل أساسي مباشرةً من النسخ الأصلية المعززة، وبالتالي تم تجربتها واختبارها.الفرق هو أنه تم نقلها إلى مساحة الاسم std::tr1 (بدلاً من التعزيز).

كل ما عليك فعله هو إضافة ما يلي إلى المترجمين الافتراضيين لديك تضمين مسار البحث:

<boost-install-path>/boost/tr1/tr1

وبعد ذلك، عندما تقوم بتضمين الرؤوس القياسية، سيتم استيراد جميع العناصر المطلوبة تلقائيًا إلى مساحة الاسم std::tr1

على سبيل المثال:

لاستخدام std::tr1::share_ptr تحتاج فقط إلى تضمين <memory>.سيعطيك هذا جميع المؤشرات الذكية في ملف واحد.

نصائح أخرى

يمكنك ببساطة قراءة تعزيز معلومات الخلفية للحصول على نظرة عامة سريعة حول سبب وجوب استخدام Boost وما يمكنك استخدامه من أجله.يستحق الدقائق القليلة التي يستغرقها.

99% محمول.

أود أن أقول إنه يحتوي على عدد لا بأس به من المكتبات المفيدة حقًا بمجرد اكتشاف الحاجة التي يتم حلها عن طريق التعزيز.إما أن تقوم بترميزها بنفسك أو تستخدم مكتبة قوية جدًا.يعد وجود مصدر على الرف لأشياء مثل Multi-Index وLambda وProgram Options وRegEx وSmartPtr وTuple أمرًا رائعًا...

أفضل شيء هو قضاء بعض الوقت في مراجعة الوثائق الخاصة بالمكتبات المختلفة وتقييم ما إذا كان من الممكن أن تكون ذات فائدة لك.

ذو قيمة!!

يمكنك الحصول على الكثير من الأشياء التي تأتي في C++ 0x.ولكن بصرف النظر عن هذه العمومية، فإن بعض التفاصيل الأفضل بسيطة مكتبة ريكس, مكتبة الصب ل الصب من السلاسل إلى ints (طاقم معجمي):

int iResult = 0;
try
{
    iResult = lexical_cast<int>("4");
}
catch(bad_lexical_cast &)
{
    cout << "Unable to cast string to int";
}

أ مكتبة التاريخ/الوقت, ، من بين أمور أخرى...

using namespace boost::gregorian;
date weekstart(2002,Feb,1);
date thursday_next = next_weekday(weekstart, Thursday); // following Thursday

هناك أيضا واجهة بايثون (تعزيز بايثون)، أ ليكسر / محلل DSL (تعزيز الروح):

// A grammar in C++ for equations
group       = '(' >> expression >> ')';
factor      = integer | group;
term        = factor >> *(('*' >> factor) | ('/' >> factor));
expression  = term >> *(('+' >> term) | ('-' >> term));

وهذا مجرد خدش السطح ...

يعد Boost أمرًا رائعًا، ولكن مجرد لعب Devil's Advocate إليك بعض الأسباب التي قد تجعلك لا ترغب في استخدام Boost:

  • يفشل أحيانًا في التجميع/العمل بشكل صحيح على المترجمين القدامى.
  • غالبًا ما يزيد من أوقات الترجمة أكثر من الأساليب الأقل ثقلاً في القالب.
  • قد لا تقوم بعض أكواد Boost بما تعتقد أنه يفعله.اقرأ الوثائق!
  • يمكن أن تؤدي إساءة استخدام القالب إلى ظهور رسائل خطأ غير قابلة للقراءة.
  • يمكن أن تؤدي إساءة استخدام القالب إلى صعوبة تجاوز التعليمات البرمجية في مصحح الأخطاء.
  • إنها تنزف حافة C++.قد لا يتم تجميع الإصدار التالي من Boost على برنامج التحويل البرمجي الحالي (الأقدم) لديك.

كل هذا لا يعني أنه لا ينبغي عليك إلقاء نظرة على كود Boost والحصول على بعض الأفكار بنفسك حتى لو لم تستخدم Boost كما هو.

Boost عبارة عن مجموعة من مكتبات C++.تم تضمين 10 منها في tr1 لـ C++ 0x.

أنت تستطيع ابدأ بالتعزيز هنا.

يعزز عبارة عن مجموعة من مكتبات C++ عالية الجودة التي تمت مراجعتها من قبل النظراء والتي تركز على قابلية النقل والصحة.إنه بمثابة الأساس الفعلي للإضافات الجديدة إلى اللغة والمكتبة القياسية.تحقق من موقعه على الانترنت لمزيد من التفاصيل.

مزايا التعزيز:إنه متاح على نطاق واسع، ويمكن توصيله بأي مترجم C++ حديث أو أي نظام أساسي.
الوظائف مستقلة عن النظام الأساسي، ولا يتعين عليك تعلم تصميم خيط جديد لكل إطار عمل جديد.
فهو يشمل الكثير من الوظائف الخاصة بالمنصة، مثل أنظمة الملفات بطريقة قياسية.

هذا ما يجب أن يتم شحنه مع C++!كان الكثير من شعبية Java هو أنه تم شحنها مع مكتبة قياسية للقيام بكل ما تريده تقريبًا.لسوء الحظ، ورثت لغة C++ الوظائف القياسية المحدودة لـ C/Unix.

shared_ptr و weak_ptr, ، خاصة في التعليمات البرمجية متعددة الخيوط، وحدها تستحق التثبيت Boost. BOOST_STATIC_ASSERT يعد أيضًا رائعًا جدًا لإجراء فحص منطقي لوقت الترجمة.

حقيقة أن الكثير من الفئات والأدوات المساعدة الموجودة في التعزيز موجودة في الرؤوس، مما يعني أنه يمكنك الحصول على الكثير من الوظائف دون الحاجة إلى تجميع أي شيء على الإطلاق، تعد أيضًا ميزة إضافية.لا تمثل قابلية النقل عادةً مشكلة، إلا إذا كنت تستخدم مترجمًا قديمًا للغاية.لقد حاولت ذات مرة جعل MPL يعمل مع VC6 وقام بطباعة 40.000 تحذير/خطأ داخلي قبل أن ينفجر تمامًا.ولكن بشكل عام، يجب أن تعمل معظم المكتبات بغض النظر عن النظام الأساسي الخاص بك أو بائع المترجم.

ضع في الاعتبار حقيقة أن عددًا لا بأس به من الأشياء من Boost موجودة بالفعل في TR1، ومن المرجح أن تكون في المراجعة التالية لمكتبة C++ القياسية.هذا تأييد كبير جدا.

Boost عبارة عن مكتبة واسعة جدًا من البنيات العامة (عادةً) التي يمكن أن تساعد في أي تطبيق تقريبًا.يمكن إثبات ذلك من خلال حقيقة أنه تم تضمين الكثير من مكونات التعزيز في مواصفات C++ 0x.

كما أنه قابل للنقل عبر الأنظمة الأساسية الرئيسية على الأقل، ويجب أن يكون قابلاً للنقل إلى أي شيء تقريبًا باستخدام مترجم C++ متوافق مع المعايير في الغالب.

التحذير الوحيد هو أنه يمكن أن يكون هناك الكثير من التبعيات المختلطة بين مكتبات التعزيز، مما يجعل من الصعب اختيار مكون معين فقط لتوزيعه (بخلاف مكتبة التعزيز بأكملها).

كل ما سبق، بالإضافة إلى أنه يشجع الكثير من تقنيات C++ الحديثة وأفضل الممارسات.يميل إلى تحسين جودة التعليمات البرمجية الخاصة بك.

لاحظ أيضًا أن معظم التعزيزات عبارة عن قوالب، لذا لا يتطلب إنشاءها
(فقط قم بتضمين ملفات الرأس الصحيحة).

الأجزاء القليلة التي تتطلب البناء اختيارية:
يمكن إنشاء كل منها بشكل مستقل وبالتالي منع الانتفاخ غير الضروري للتعليمات البرمجية غير الضرورية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top