我有几个类我已经制作了std :: shared_ptr版本,如下所示:
typedef std::shared_ptr<MediaItem> MediaItemPtr;
typedef std::shared_ptr<ImageMediaItem> ImageMediaItemPtr;
class MediaItem
{
//stuff here
}
class ImageMediaItem : public MediaItem
{
//more stuff here
}
在内部,我将所有内容作为MediaItemPtr对象传递,但是当我尝试强制转换为ImageMediaItemPtr时,我尝试的任何东西似乎都无法工作。例如:
ImageMediaItemPtr item = std::dynamic_pointer_cast<ImageMediaItemPtr>(theItem);
//theItem is MediaItemPtr
失败
错误C2440:'初始化':无法转换 '的std :: TR1 :: shared_ptr的&LT; _Ty&GT;'到'std :: tr1 :: shared_ptr&lt; _Ty&gt;'
关于这个演员应该如何运作的任何想法?我对shared_ptr
有点新鲜答案 0 :(得分:10)
dynamic_pointer_cast
的模板参数应该是指向的类型。换句话说,它应该是T
而不是shared_ptr<T>
。
在这种情况下,它应该是dynamic_pointer_cast<ImageMediaItem>
而不是dynamic_pointer_cast<ImageMediaItemPtr>
。
答案 1 :(得分:4)
尝试:
ImageMediaItemPtr item = std::dynamic_pointer_cast<ImageMediaItem>(theItem);