static_cast مع دفعة :: shared_ptr؟
-
05-07-2019 - |
سؤال
ما هو ما يعادل 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 المشغل الثالث ()