الأساس المنطقي لـ Boost.Preprocessor باستخدام وحدات الماكرو بدلاً من التعريفات البسيطة؟

StackOverflow https://stackoverflow.com/questions/5499392

سؤال

على سبيل المثال BOOST_PP_ITERATE و BOOST_PP_ITERATION, ، كما رأينا في إجابة GMan هنا, ، هي وحدات ماكرو للمعالج المسبق، بدون أي معلمات.هل هناك سبب لعدم كونها مجرد تعريفات بسيطة واستخدامها على هذا النحو بدون ()?

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

المحلول

بشكل عام ، يمكن استخدام وظيفة مثل الماكرو لمنع التوسع الكلي غير المقصود.
على سبيل المثال، بافتراض أن لدينا استدعاء الماكرو التالي:

BOOST_PP_CAT( BOOST_PP_ITERATION, _DEPTH )

ونحن نتوقع أن يتم توسيع هذا إلى BOOST_PP_ITERATION_DEPTH.
ومع ذلك، إذا BOOST_PP_ITERATION هو كائن مثل ماكرو (غير وظيفي) ، وسيتم توسيعه إلى تعريفه الخاص قبل الرمز المميزBOOST_PP_ITERATION_DEPTH يتم إنشاؤها عن طريق التسلسل.

نصائح أخرى

من المفترض أنهم يقومون بعمليات:وبالتالي، فإن استخدامها يجب أن يوضح أنك كذلك بالفعل استدعاء شيء وليس مجرد استخدام بعض الثابت.

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