shared_ptr的动态转换

Ada*_*ile 3 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
}
Run Code Online (Sandbox Code Playgroud)

在内部,我将所有内容作为MediaItemPtr对象传递,但是当我尝试强制转换为ImageMediaItemPtr时,我尝试的任何东西似乎都无法工作.例如:

ImageMediaItemPtr item = std::dynamic_pointer_cast<ImageMediaItemPtr>(theItem);
//theItem is MediaItemPtr
Run Code Online (Sandbox Code Playgroud)

失败了

错误C2440:'初始化':无法从'std :: tr1 :: shared_ptr <_Ty>'转换为'std :: tr1 :: shared_ptr <_Ty>'

关于这个演员应该如何运作的任何想法?我对shared_ptr有点新鲜

int*_*jay 10

模板参数dynamic_pointer_cast应该是指向的类型.换句话说,它应该是T而不是shared_ptr<T>.

在这种情况下,它应该是,dynamic_pointer_cast<ImageMediaItem>而不是dynamic_pointer_cast<ImageMediaItemPtr>.


Sea*_*ean 6

尝试:

ImageMediaItemPtr item = std::dynamic_pointer_cast<ImageMediaItem>(theItem);
Run Code Online (Sandbox Code Playgroud)