首页 / 知识
关于c ++:动态转换的一些“好用”示例是什么?
2023-04-13 05:44:00

What are some 'good use' examples of dynamic casting?我们经常听到/读到应该避免动态转换。 我想知道您认为它的"好用"示例是什么? 编辑: 是的,我知道其他话题:确实是在阅读那里的第一个答案时,我问了我的问题! 这个最近的线程提供了一个方便使用的示例。有一个基础Shape类,以及从其派生的Circle和Rectangle类。在测试相等性时,很明显,Circle不能等于Rectangle,尝试进行比较将是一场灾难。在遍历指向Shapes的指针的集合时,dynamic_cast会执行双重任务,告诉您形状是否可比,并为您提供合适的对象进行比较。 向量迭代器不可取消 这是我经常做的事情,虽然不漂亮,但简单实用。
我经常使用实现接口的模板容器,
ContainerInterface有一些基本有用的东西,仅此而已。如果我想在不公开我的模板实现的情况下对整数向量使用特定的算法,则接受接口对象并将它动态实现到实现中的MyVector很有用。例:
我可以将Process()方法添加到ContainerInterface上,以多态解析,这将是一种更好的OOP方法,但有时我更喜欢这样做。当您有简单的容器,大量的算法并且想要隐藏实现时,dynamic_cast提供了一个简单而丑陋的解决方案。 您还可以查看双调度技术。 高温超导 但是,它非常有用,但在大多数情况下,它太有用了:如果要完成工作,最简单的方法是进行dynamic_cast,则通常不是OO设计不良的征兆,反过来又可能导致麻烦在未来以不可预见的方式。 好吧,用C#中的扩展方法真的很好。 例如,假设我有一个对象列表,我想从它们中获取所有ID的列表。我可以逐步解决所有问题,然后将它们拉出,但我想将这些代码分段以供重用。 所以像
会很酷,除了扩展方法外,您将不知道传入的类型。 所以
会很棒。
通过C接口将句柄公开给对象时,可以将其用于运行时类型安全。让所有公开的类都继承自一个公共基类。接受函数的句柄时,首先转换为基类,然后动态转换为您期望的类。如果它们传递了一个荒谬的句柄,则在运行时找不到rtti时会出现异常。如果它们传入了错误类型的有效句柄,则将获得NULL指针,并可能引发您自己的异常。如果它们传递了正确的指针,那就很好了。 我当前的玩具项目使用dynamic_cast两次;一次是为了解决C ++中缺乏多重调度的问题(这是一种访问者风格的系统,可以使用多个调度而不是dynamic_casts),并且一次是对特定的子类型进行特殊处理。 在我看来,这两者都是可以接受的,尽管前者至少源于语言缺陷。实际上,我认为这可能是常见的情况;大多数dynamic_cast(通常有很多"设计模式")都是针对特定语言缺陷的解决方法,而不是针对特定缺陷的解决方法。 |
最新内容
相关内容
如何杀死一个Python线程
如何杀死一个Python线程,状态,线程,代码,标准,意外,工作,控制权,培训,事件,结束,我经常被问到如何杀死一个后台线程,这个问题的答案让很多人不Python学习之进程和线程
Python学习之进程和线程,代码,平台,系统,线程,进程,标准,数据,服务,培训,管理,对于操作系统来说,一个任务就是一个进程(Process),比如打开一个Python线程编程的两种方式
Python线程编程的两种方式,代码,包装,线程,培训,函数,对象,模块,参数,方式,方法,Python中如果要使用线程的话,python的lib中提供了两种方式。Python变量数据类型的转换
Python变量数据类型的转换,代码,数据,培训,信息,字符串,类型,变量,整数,浮点,函数,虽然Python是弱类型编程语言,不需要像Java或C语言那样还要Python文件操作步骤示例
Python文件操作步骤示例,异常,代码,信息,文件,设计,简介,通用,意外,中级,培训,我们来读取这样一个文本文件:song.txt,该文件的字符编码为utf-8Python 多线程死锁问题的巧妙解决
Python 多线程死锁问题的巧妙解决方法,异常,持有,代码,情况,信息,管理,数据,包装,策略,预期,死锁死锁的原理非常简单,用一句话就可以描述完。Python进程、线程、协程的区别
Python进程、线程、协程的区别,地址,单位,线程,入口,状态,培训,进程,区别,资源,空间,简述进程、线程、协程的区别以及应用场景?线程是指进程Python的动态类型
Python的动态类型,数据,数字,对象,情况,对比,培训,赋值,字符串,元素,整数,在我们接触的对象中,有一类特殊的对象,是用于存储数据的。常见的该类用Python实现GB与BIG5码的转换
用Python实现GB与BIG5码的转换,位置,网上,工作,大陆,香港,汉字,字节,码表,培训,国家,GB码与BIG5是中国人常用的两种编码集。GB码为大陆使用,BIpython中日期与字符串如何相互转换
python中日期与字符串如何相互转换?,时间,代码,培训,字符串,日期,格式,内容,数组,字符,本文,在python的使用过程中我们会发现,如果编程的格式python中实现字符与ascll码相互转
python中实现字符与ascll码相互转换方法,代码,培训,字符,函数,方法,实例,字符串,本文,以上,更多,在编程中,我们常常会给代码加密。如果是进行python多线程和多进程之间的联系
python多线程和多进程之间的联系,进程,培训,通信,标准,管理,代理,线程,模块,之间,全部,关于多线程的大概讲解:在Python的标准库中给出了2个模