لماذا تستخدم Boost :: ICE_OR بدلاً من || و BOOST :: ICE_ بدلاً من && في enable_if؟

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

سؤال

كما يشير السؤال، هل هناك سبب لاستخدام الأشخاص لإصدار البنية بدلاً من الشروط الشرطية العادية؟

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

المحلول

مقتطف من تعزيز إرشادات الترميز للتعبيرات الثابتة المتكاملة:

لا تستخدم العوامل المنطقية في التعبيرات الثابتة المتكاملة؛استخدم البرمجة التعريفية للقالب بدلاً من ذلك.

يحتوي الرأس على عدد من قوالب الحلول البديلة، التي تؤدي دور العوامل المنطقية، على سبيل المثال بدلاً من:

INTEGRAL_CONSTANT1 || INTEGRAL_CONSTANT2

يستخدم:

::boost::type_traits::ice_or<INTEGRAL_CONSTANT1,INTEGRAL_CONSTANT2>::value

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

لذلك أود أن أقول أبدا على مترجم متوافق.(ولكن إذا كنت بحاجة إلى دعم المترجمين غير المتوافقين، فاستخدمه.)

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