std::dynamic_pointer_cast细节用法

关于std::dynamic_pointer_cast的使用,只适合具有继承关系的使用,比如

class D:public B

{

};

如果,B的指针指向D时,想用D里面的函数,而在B里面没有时,我们就会使用std::dynamic_pointer_cast函数,但是,这只适合shared_ptr,不适合std::unique_ptr,因为c++标准库根本没实现。所以要自己实现一个。

实现细节:

template <typename To, typename From, typename Deleter>
std::unique_ptr<To, Deleter> dynamic_unique_cast(std::unique_ptr<From, Deleter>&& p) {
    if (To* cast = dynamic_cast<To*>(p.get()))
    {
        std::unique_ptr<To, Deleter> result(cast, std::move(p.get_deleter()));
        p.release();
        return result;
    }
    return std::unique_ptr<To, Deleter>(nullptr); // or throw std::bad_cast() if you prefer
}

总结:估计c++标准库不去实现,是可能违背了std::unique_ptr 的唯一性,以上,函数只适合研究学习。不建议,用在真正的项目里面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

using 和typedef区别

using 可以用于模板别名&#xff0c;typedef 不可用于模板别名

Windows 8实用窍门系列:9.Windows 8中使用FlipView

FlipView控件类似于翻页控件&#xff0c;并且是现成的翻页按钮&#xff0c;你只需要为其增加数据项即可。本文讲述两种方式的FlipView项目和展示。 一&#xff1a;直接前台FlipViewItem <FlipView><FlipViewItem><Image Stretch"Uniform" Source"…

fstream

openmod : app 每次写入前寻位到流结尾 binary 以二进制模式打开 in 为读打开 out 为写打开 trunc 在打开时舍弃流的内容 ate 打开后立即寻位到流结尾 std::ifstream 读入 std::ostream 写出

冬季,拿什么来温暖你的心情

本文主要写了我在心情或者状态不好的时候如何恢复先前状态或者达到更佳的状态的方法&#xff0c;希望能引发读者的一些思考或带来一定的益处。如果有更好的方法或者我有做的不对或者不是最佳方法的地方&#xff0c;期待读者们的意见和建议。 两个多周没写文章了&#xff0c;最近…

Python获取命令行参数

sys.argv[] 包含命令行参数的字符串列表&#xff0c;通过下标获取参数。 例如: ?#!/usr/bin/python # Filename: using_sys.py import sys print The command line arguments are:for i in sys.argv: print i print \n\nThe PYTHONPATH is, sys.path, \n<BR><BR>p…

static用法

1.在函数内表示静态局部变量,作用域为静态存储区 2.在函数外全局区表示该标识符限定在本文件中可见 3.在类成员中表示静态成员

最牛X得“高考”作文

作文要求&#xff1a; "细雨湿衣看不见&#xff0c;闲花落地听无声"是唐朝诗人刘长卿在《别严士元》中的诗句。 曾经有人这样理解这句诗&#xff1a;1、这是歌颂春天的美好意境。2、闲花、细雨表达了不为人 知的寂寞。3、看不见、听不见不等于无所作为&…

结构体对齐

//按1个字节对齐 #pragma pack(push,1) struct MyStruct { std::uint32_t a; std::uint16_t b; }; #pragma pop size_t data_size sizeof(MyStruct); //占6个字节

SVN操作指南

http://blog.csdn.net/happy4nothing/article/details/376604#_Toc101751894

高性能服务器模型分类

高性能服务器的几种模型概念&#xff1a; actor模型&#xff1a; 实体之经过消息通信&#xff0c;各自处理本身的数据&#xff0c;可以实现这并行。 这种方式&#xff0c;有点相似rpc。 skynet是actor模型(听说是&#xff0c;具体没研究过) reactor模型&#xff1a; 1 向…

[人生百态]爱的样子

爱是只要一看到你,心里就觉得被裝的满满的爱是在看不到你的時候,默默想着你,默默念着你爱是听到你的声音就会觉得空气都是甜的爱是一闭上眼,浮现的全部是你的影子爱是一睁开眼,就希望你站在我面前爱是喜欢远远的,偷偷的凝视着你的身影爱是喜欢看着你的眼睛,因为这样的你眼里才只…

extern “C“解决链接问题

extern "C" 的作用是让 C 编译器将 extern "C" 声明的代码当作 C 语言代码处理&#xff0c;可以避免 C 因符号修饰导致代码不能和C语言库中的符号进行链接的问题。 extern "C" 使用 #ifdef __cplusplus extern "C" { #endifvoid *me…

union区别

联合&#xff08;union&#xff09;是一种节省空间的特殊的类&#xff0c;一个 union 可以有多个数据成员&#xff0c; 但是在任意时刻只有一个数据成员可以有值。当某个成员被赋值后其他成员变为未定义状态。 联合有如下特点&#xff1a; 默认访问控制符为 public 可以含有…

大小端判断

int i 0x12345678; char value *(char*)&i; if (*(char*)&i 0x000000078) { std::cout << "小端" << std::endl; }else { std::cout << "大端" << std::endl; }

推荐系统相关资源汇总

2019独角兽企业重金招聘Python工程师标准>>> 为了更好的学习推荐系统&#xff0c;本博文将个人知道的关于推荐系统的相关资源整理汇总&#xff0c;拿出来与大家分享。本博文每月更新一次&#xff0c;长期维护&#xff0c;如果你有好的关于推荐系统的资源&#xff0c…

tcp工作原理

TCP 三次握手建立连接 TCP 建立连接全过程解释 客户端发送 SYN 给服务器&#xff0c;说明客户端请求建立连接&#xff1b;服务端收到客户端发的 SYN&#xff0c;并回复 SYNACK 给客户端&#xff08;同意建立连接&#xff09;&#xff1b;客户端收到服务端的 SYNACK 后&#xf…

物联网碰到云计算会怎么样?

如果提起物联网和云计算&#xff0c;熟悉安防行业的朋友们可能都不会太过陌生。没错&#xff0c;就是这两项新生技术的问世&#xff0c;给我们安防行业带来了许多全新的理念。而在不少人的眼中&#xff0c;物联网和云计算在潜意识中也是有不少联系的&#xff0c;但是如果要细细…

可变参数使用

#include<iostream> //c17写法&#xff0c;折叠表达式 template<typename...args> auto sum(args&&...types) { //一元右折 //return (types ...); //一元左折 //return (...types); //二元左折 //return(0 ... types); /…

CentOS FTP安装及配置

CentOS FTP安装及配置 LINUX下实现FTP服务的软件很多,最常见的有vsftpd,Wu-ftpd和Proftp等.Red Hat Enterprise Linux中默认安装的是vsftpd.访问FTP服务器时需要经过验证,只有经过了FTP服务器的相关验证,用户才能访问和传输文件.vsftpd提供了3种ftp登录形式: (1)anonymous(…

std::optional

c17之后引入optional&#xff0c;其实就是把boost库里面实现机制引入进来.作用:良好地处理构造开销高昂的对象&#xff0c;并更加可读.有点像指针的用法.个人认为&#xff0c;没啥鸟用&#xff0c;和用指针没啥区别 例子: #include <optional> #include <vector>…