我有两个 U 和 T 类的 shared_ptrs,其中 T 是 U 的基数。
从shared_ptr<U>
to进行隐式转换是没有问题的shared_ptr<T>
。但是也可以从shared_ptr<T>
to进行转换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)”的匹配函数
注意:模板 std::__shared_ptr<_Tp1, _Lp> std::static_pointer_cast(const std::__shared_ptr<_Tp2, _Lp>&)
注意:模板参数扣除/替换失败:
注意:'TPtr {aka boost::shared_ptr}' 不是从 'const std::__shared_ptr<_Tp2, _Lp>' 派生的
此问题的解决方案:
混合std::shared_ptr
使用boost::shared_ptr
不是一个好主意。