c++ 之 dynamic_pointer_cast

这篇具有很好参考价值的文章主要介绍了c++ 之 dynamic_pointer_cast。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

/*
 * dynamic_pointer_cast
 */

    描述 (Description)
        它返回一个正确类型的sp副本,其存储的指针从U *动态地转换为T *。

    声明 (Declaration)
        以下是std :: dynamic_pointer_cast的声明。
        template <class T, class U>
          shared_ptr<T> dynamic_pointer_cast (const shared_ptr<U>& sp) noexcept;


    C++11
        template <class T, class U>
          shared_ptr<T> dynamic_pointer_cast (const shared_ptr<U>& sp) noexcept;


    参数 (Parameters)
        sp - 它是一个共享指针。

    返回值 (Return Value)
        它返回一个正确类型的sp副本,其存储的指针从U *动态地转换为T *。

    异常 (Exceptions)
        noexcep - 它不会抛出任何异常。

/*
 * example
 */
#include <iostream>
#include <memory>

struct A {
    static const char* static_type;
    const char* dynamic_type;

    A() {
        dynamic_type = static_type;
    }
};

struct B: A {
    static const char* static_type;

    B() {
        dynamic_type = static_type;
    }
};

const char* A::static_type = "sample text A";
const char* B::static_type = "sample text B";

int main ()
{
   std::shared_ptr<A> foo;
   std::shared_ptr<B> bar;

   bar = std::make_shared<B>();
   foo = std::dynamic_pointer_cast<A>(bar);

   std::cout << "foo's static type: " << foo->static_type << '\n';
   std::cout << "foo's dynamic type: " << foo->dynamic_type << '\n';
   std::cout << "bar's static type: " << bar->static_type << '\n';
   std::cout << "bar's dynamic type: " << bar->dynamic_type << '\n';

   return 0;
}

/*
    foo's static type: sample text A
    foo's dynamic type: sample text B
    bar's static type: sample text B
    bar's dynamic type: sample text B
*/文章来源地址https://www.toymoban.com/news/detail-605707.html

到了这里,关于c++ 之 dynamic_pointer_cast的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++的类型转换运算符:dynamic_cast

    顾名思义,与静态类型转换相反,动态类型转换在运行阶段(即应用程序运行时)执行类型转换。 可检查 dynamic_cast 操作的结果,以判断类型转换是否成功。使用 dynamic_cast 运算符的典型语法如下: 例如: 如上述代码所示,给定一个指向基类对象的指针,程序员可使用 dyna

    2024年02月15日
    浏览(45)
  • 【C++】dynamic_cast 进行类型转换步骤以及底层实现

    dynamic_cast 是 C++ 中的一种类型转换方式,它可以在运行时进行类型检查, 用于将一个指针或引用强制转换为另一个类型的指针或引用 。dynamic_cast 能够进行安全的向下转型,即将一个基类指针或引用转换为派生类指针或引用。如果转换成功,dynamic_cast 返回转换后的指针或引用

    2023年04月25日
    浏览(48)
  • 【C++入门到精通】C++类型的转换 | static_cast | reinterpret_cast | const_cast | dynamic_cast [ C++入门 ]

    当我们在进行C++编程时,类型转换是一个非常常见的操作。而在C++中,我们有多种类型转换的方式可供选择。其中包括** static_cast 、 reinterpret_cast 、 const_cast 和 dynamic_cast **。这些类型转换操作符能够在不同的场景下帮助我们实现所需的类型转换。本文将详细介绍这些类型转换

    2024年02月22日
    浏览(39)
  • 【C++】类型转换(dynamic_cast,const_cast,static_cast,reinterpret_cast)

    🌏博客主页: 主页 🔖系列专栏: C++ ❤️感谢大家点赞👍收藏⭐评论✍️ 😍期待与大家一起进步! 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败 显式类型转化:需要用户自己处理 缺陷: 转换的可视性比较差,所有的转换形式都是以一种相同

    2024年02月07日
    浏览(44)
  • 【036】读懂C++的强制类型转换static_cast、const_cast、dynamic_cast以及reinterpret_cast

    💡 作者简介:专注于C/C++高性能程序设计和开发,理论与代码实践结合,让世界没有难学的技术。包括C/C++、Linux、MySQL、Redis、TCP/IP、协程、网络编程等。 👉 🎖️ CSDN实力新星,社区专家博主 👉 🔔 专栏介绍:从零到c++精通的学习之路。内容包括C++基础编程、中级编程、

    2024年02月12日
    浏览(38)
  • Golang-指针(pointer)

    指针:指向内存地址的变量,指针用来存储变量的内存地址 Go 语言定义变量必须声明数据类型,因为不同数据类型的数据占用不同的存储空间,导致内存地址分配大小各不相同,所有指针只能存放同一类型变量的内存地址。 指针分为两种:类型指针和切片指针 类型指针允许

    2023年04月26日
    浏览(44)
  • css鼠标样式 cursor: pointer

    cursor: none; cursor:not-allowed; 禁止选择 user-select: none; pointer-events:none; 禁止触发事件, 该样式会阻止默认事件的发生,但鼠标样式会变成箭头

    2024年02月12日
    浏览(41)
  • CSS pointer-events 属性

    pointer-events 何种情况下元素可以成为鼠标事件的目标 auto ( 默认值 ) none (元素不能对鼠标事件做出反应) / 以下只适用于 SVG / visiblePainted visibility 属性值为 visible,且鼠标指针在元素内部,且 fill 属性指定了 none 之外的值 visibility 属性值为 visible,鼠标指针在元素边界上,

    2024年01月19日
    浏览(36)
  • 认识 CSS pointer-events 属性

    pointer-events 属性用来控制一个元素能否响应鼠标操作,常用的有 auto 和 none 条目 状态 初始值 auto 可用值 适用所有元素:auto/none,只适用于 SVG:bounding-box/visiblePainted/visibleFill/visibleStroke/visible/painted/fill/stroke/all 可继承 是的 动画类型 离散动画(关键帧之间不会有插帧,

    2024年02月11日
    浏览(38)
  • [VRTK4.0]添加一个Curved Pointer

    演示如何将 Tilia曲线指针添加到场景,以及如何使用 OpenXR 指针姿势来确保指针方向始终与 OpenXR 控制器的正确方向匹配 步骤一:       现在我们需要Tilia包,所以我们转到窗口Tilia包导入器,既然我们需要对象指针包,那么我们就需要导入对应的包:  步骤二:          

    2024年02月15日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包