我有几个类我已经制作了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>.
尝试:
ImageMediaItemPtr item = std::dynamic_pointer_cast<ImageMediaItem>(theItem);
Run Code Online (Sandbox Code Playgroud)