سؤال

ما هو ما يعادل static_cast مع boost::shared_ptr؟

وبعبارة أخرى، كيف لدي لإعادة كتابة ما يلي

Base* b = new Derived();
Derived* d = static_cast<Derived*>(b);

وعند استخدام shared_ptr؟

boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = ???
هل كانت مفيدة؟

المحلول

استخدم boost::static_pointer_cast:

boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);

نصائح أخرى

وهناك ثلاث شركات المدلى بها لمؤشرات الذكية: static_pointer_cast، dynamic_pointer_cast، وconst_pointer_cast. فهي إما في boost مساحة (التي تقدمها <boost/shared_ptr.hpp>) أو std::tr1 مساحة (شريطة إما عن طريق تفعيل أو تنفيذ TR1 المترجم الخاص بك).

وكتعليق: إذا المستمدة يفعل في الواقع مستمدة من قاعدة، ثم يجب عليك استخدام dynamic_pointer_cast بدلا من يلقي ثابتة. سيقوم النظام لديهم فرصة للكشف عندما / إذا المدلى بها ليست صحيحة.

والجدير بالذكر أن هناك اختلاف في عدد من مشغلي الصب التي قدمتها دفعة وتطبيقات TR1.

ووTR1 لا يعرف const_pointer_cast المشغل الثالث ()

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