shared_ptr的动态转换

时间:2013-11-26 14:10:26

标签: c++ shared-ptr

我有几个类我已经制作了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

有点新鲜

2 个答案:

答案 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);