لماذا تستخدم Boost :: ICE_OR بدلاً من || و BOOST :: ICE_ بدلاً من && في enable_if؟
-
28-10-2019 - |
سؤال
كما يشير السؤال، هل هناك سبب لاستخدام الأشخاص لإصدار البنية بدلاً من الشروط الشرطية العادية؟
المحلول
مقتطف من تعزيز إرشادات الترميز للتعبيرات الثابتة المتكاملة:
لا تستخدم العوامل المنطقية في التعبيرات الثابتة المتكاملة؛استخدم البرمجة التعريفية للقالب بدلاً من ذلك.
يحتوي الرأس على عدد من قوالب الحلول البديلة، التي تؤدي دور العوامل المنطقية، على سبيل المثال بدلاً من:
INTEGRAL_CONSTANT1 || INTEGRAL_CONSTANT2
يستخدم:
::boost::type_traits::ice_or<INTEGRAL_CONSTANT1,INTEGRAL_CONSTANT2>::value
الأساس المنطقي:يميل عدد من المترجمين (خاصة مترجمي بورلاند ومايكروسوفت) إلى عدم التعرف على التعبيرات الثابتة المتكاملة التي تتضمن عوامل منطقية كتعبيرات ثابتة متكاملة حقيقية.تظهر المشكلة بشكل عام فقط عندما يكون التعبير الثابت المتكامل متداخلاً بعمق داخل كود القالب، ويصعب إعادة إنتاجه وتشخيصه.
لذلك أود أن أقول أبدا على مترجم متوافق.(ولكن إذا كنت بحاجة إلى دعم المترجمين غير المتوافقين، فاستخدمه.)