كيفية الحصول على أعضاء بيانات ثابتة في مكتبة رأس فقط؟

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

  •  13-12-2019
  •  | 
  •  

سؤال

ما هي أفضل طريقة للحصول على عضو ثابت في فئة مكتبة غير قالب، دون وضع عبء تحديد العضو في مستخدم الفصل؟

أقول أنني أريد تقديم هذه الفئة:

giveacodicetagpre.

ثم يجب ألا تنس المستخدم من الفصل تحديد العضو الثابت في مكان ما (كما هو بالفعل أجاب href="https://stackoverflow.com/Questions/3536372/ تحديد-ثابت-الأعضاء - في C "> العديد من مرات ):

giveacodicetagpre.

لدي إجابة أدناه، لكن لديها بعض العيوب.هل هناك حلول أفضل و / أو أكثر أناقة؟

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

المحلول

c ++ 17 وما فوق

استخدم متغيرات inline static للتهيئة غير الديناميكية:

giveacodicetagpre.

واستخدام الوظائف المتغيرات الثابتة المحلية خلاف ذلك:

giveacodicetagpre.

c ++ 14 وتحت

استخدم وظيفة الإحصاء المحليين، لأنهم سهل الاستخدام.

إذا كنت ترغب في ذلك لسبب ما لعضو البيانات ثابتا ، فيمكنك استخدام خدعة القالب:

giveacodicetagpre.

على الإحصاءات المحلية

للحصول على الموارد التي تتطلب تهيئة ديناميكية، من الأفضل استخدام ثابتة محلية.

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

هناك بعض النفقات العامة الطفيفة لاستخدام الإحصاءات المحلية. من C ++ 11 فصاعدا، يلزم التهيئة آمنة من الخيوط، والتي تعني عادة أن أي حق الوصول مصنوع من فرع للقراءة الذرية والتنبؤ جيدا.

نصائح أخرى

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

giveacodicetagpre.

الآن استخدم فئة حامل:

giveacodicetagpre.

ولكن كما تم تحديد اسم العضو في فئة حامل، لا يمكنك استخدام نفس الحامل لأكثر من عضو ثابت واحد.

اعتبارا من C ++ 17. يمكنك الآن استخدام المتغيرات المضمنة للقيام بذلك:

giveacodicetagpre.

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