Здравствуйте, reversecode, Вы писали:
R>std::static_pointer_cast R>std::dynamic_pointer_cast R>изучите уже стандарт хотя бы поверхностно
Касты нужны для перехода от base к derived.
А для поддержки преобразования MyPtr<derived> к MyPtr<base> не делают явный каст.
Для этого используют шаблонный конструктор template<class U> MyPtr(const MyPtr<U>& other).
Если U* не преобразуется неявно в T*, то будет ошибка.
Кстати, MyPtr<T> в MyPtr<const T> по тому же принципу преобразуется.
Re: Конвертация MySharedPtr<BaseClass> в MySharedPtr<DerivedClass>
Здравствуйте, Максим, Вы писали:
М>Подскажите, пожалуйста, как shared_ptr осуществляет подобные преобразования М>По умолчанию это не должно работать, поскольку std::shared_ptr<BaseClass> и std::shared_ptr<DerivedClass> это разные типы. Вот это не работает
М>
М>template <typename T> class MySharedPtr {
М>public:
М> MySharedPtr(T *t) : t_{t} {}
М>private:
М> T *t_;
М>};
М>void pass_my_ptr(MySharedPtr<BaseClass> a) {
М> std::cout << "ok" << std::endl;
М>}
М>
R>std::static_pointer_cast R>std::dynamic_pointer_cast R>изучите уже стандарт хотя бы поверхностно
А что в таком тоне отвечаете? Опять кто-то обидел? Про эти функции я знаю. Вопрос был про то, как shared_pointer внутри производит автоматическое преобразование подобного рода.
Errare humanum est
Re[2]: Конвертация MySharedPtr<BaseClass> в MySharedPtr<DerivedClass>
М>А что в таком тоне отвечаете?
Спасибо, как в 90-е вернулся, молодость вспомнил. Типичное общение с группой гопников в те времена. Тебе осталось задать следующий вопрос: "А если найду?".
Re[2]: Конвертация MySharedPtr<BaseClass> в MySharedPtr<DerivedClass>