У меня есть два shared_ptrs классов U и Т, где Т является основой U.неявного преобразования shared_ptr
Это не является проблемой, чтобы сделать неявное преобразование из shared_ptr<U>
в shared_ptr<T>
. Но также возможно сделать преобразование от shared_ptr<T>
до shared_ptr<U>
?
Я попробовал мотивационные решение:
class T {
public:
virtual ~T() {}
protected:
void fillData() = 0;
};
class Timpl : public T
{
public:
virtual ~Timpl() {}
protected:
virtual void fillData() = 0;
};
class U : public Timpl {
public:
virtual ~U() {}
protected:
virtual void fillData() {...} // fill
};
typedef shared_ptr<T> TPtr
typedef shared_ptr<U> UPtr
TPtr tp = std::make_shared<U>();
UPtr up = std::static_pointer_cast<U>(tp); //<-- error here :
ошибка: нет подходящей функции для вызова 'static_pointer_cast (TPtr)'
Примечание: Шаблон станд :: __ shared_ptr < _Tp1, _Lp> станд :: static_pointer_cast (Const станд :: __ shared_ptr < _Tp2, _Lp> &)
Примечание: аргумент шаблона вычет/замена не удалась:
примечание: 'TPtr {ака повышение :: shared_ptr}' не является производным от 'сопзЬ станд :: __ shared_ptr < _Tp2, _Lp>'
Решение этой проблемы:
смешивание std::shared_ptr
с boost::shared_ptr
это не хорошая идея.