আপডেট: এই উদাহরণে ভাগ করা_পটারটি বুস্টের মতো, তবে এটি শেয়ারড_পলিমারফিক_ডাউন কাস্ট (বা সেই ক্ষেত্রে ডায়নামিক_পয়েন্টার_কাস্ট বা স্ট্যাটিক_পয়েন্টার_কাস্ট) সমর্থন করে না!
আমি রেফারেন্স গণনাটি না হারিয়ে একটি উত্পন্ন শ্রেণিতে একটি ভাগ করা পয়েন্টার শুরু করার চেষ্টা করছি:
struct Base { };
struct Derived : public Base { };
shared_ptr<Base> base(new Base());
shared_ptr<Derived> derived;
// error: invalid conversion from 'Base* const' to 'Derived*'
derived = base;
এ পর্যন্ত সব ঠিকই. আমি আশা করিনি যে সি ++ বেইসটিকে স্পষ্টতই বেস * কে ডেরিভড * এ রূপান্তর করবে। যাইহোক, আমি কোডটির দ্বারা প্রকাশিত কার্যকারিতাটি চাই (এটি হল বেস পয়েন্টারটি ডাউনকাষ্ট করার সময় রেফারেন্স গণনা বজায় রাখা)। আমার প্রথম চিন্তাটি বেসে একটি কাস্ট অপারেটর সরবরাহ করা ছিল যাতে ডেরিভডের একটি অন্তর্নিহিত রূপান্তর ঘটতে পারে (প্যাডেন্টদের জন্য: আমি পরীক্ষা করব যে ডাউন কাস্টটি বৈধ কিনা, চিন্তা করবেন না):
struct Base {
operator Derived* ();
}
// ...
Base::operator Derived* () {
return down_cast<Derived*>(this);
}
ঠিক আছে, এটি কোনও লাভ হয়নি। দেখে মনে হচ্ছে সংকলকটি আমার টাইপকাস্ট অপারেটরটিকে সম্পূর্ণ উপেক্ষা করেছে। কীভাবে কোনও ধারণাগুলি কীভাবে আমি ভাগ করে নেওয়া_এসপিআর্টমেন্ট কাজ করতে পারি? অতিরিক্ত পয়েন্টগুলির জন্য: কী ধরণের Base* const
? const Base*
বুঝলাম, তবে Base* const
? এক্ষেত্রে কী বোঝায় const
?