الأساس المنطقي لـ Boost.Preprocessor باستخدام وحدات الماكرو بدلاً من التعريفات البسيطة؟
-
14-11-2019 - |
سؤال
على سبيل المثال 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
يتم إنشاؤها عن طريق التسلسل.
نصائح أخرى
من المفترض أنهم يقومون بعمليات:وبالتالي، فإن استخدامها يجب أن يوضح أنك كذلك بالفعل استدعاء شيء وليس مجرد استخدام بعض الثابت.
لا تنتمي إلى StackOverflow