关于运行时识别

Mattary 2003-08-22 02:58:23
一个项目,需要一个类型体系, 如:
class object {
object();
virtual ~object();
};

class type1 : public object
{
type1();
~type1();
}


现在要在runtime为识别一个对象的真实类型,
我现在有三个方案来识别一个对象类型,

一个是用现在的c++ RIIT:
type1* tmp = dynamic_cast<type1*>(obj),
if (tmp) ...

一个是在根类里加一个字段:
int __uuid, 不同的对象类型不同的值
for example: type1 contructor:
type1() : object(T_type1)
{
}

一个是用virtual function: int get_type(); 根类是虚的, 不同的子类返回不同的值,
for example:
int type1::get_type() {
return Istype1
}

这三种方式都能实现我要求的功能,但是不知道那一个性能最好。

...全文
73 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
nsly 2003-08-22
  • 打赏
  • 举报
回复
另外,我认为在语言层面上已经支持dynamic_cast,为什么不直接使用?
nsly 2003-08-22
  • 打赏
  • 举报
回复
我使用的是第三种和第一种的结合。

第一,不同的情况可能会不同对待。
第二,第三种在构造的时候不是很方便。
zcchm 2003-08-22
  • 打赏
  • 举报
回复
优先考虑的应该是:这些类之间的关系。

最不推荐用的是第二种:“类型域”,无论从代码的弹性,优雅来看,都不宜使用。

第一种不够优雅,会造成代码肥大,但是效率高些。

第三中是推荐的用法,代码优雅,富有弹性,就是如果你再添加一种类型的话,不需对原有代码进行任何修改。但是效率低些。




Mattary 2003-08-22
  • 打赏
  • 举报
回复
我觉得第一种方法在时间上有损失,第二,三种在空间上有损失,是不是有更好地办法?
luohualiushui 2003-08-22
  • 打赏
  • 举报
回复
2,3两种方法都让类变大了,不好
我觉得用RIIT比较好,但是楼主的代码效率低了点
用typeid直接比较,效率应该会搞一些
if (typeid(temp)==typeid(type1))
{
.............
}
zss6587 2003-08-22
  • 打赏
  • 举报
回复
我认为第三种方法性能上不比第二种差.
zss6587 2003-08-22
  • 打赏
  • 举报
回复
我推荐使用第三种,想不想借用一下 Template Method模式 ?
sevecol 2003-08-22
  • 打赏
  • 举报
回复
性能的话,第二个应该是最好的。
表达上第一个最优雅

    本课程分享对由中国开发者提供的OpenCV条形码识别模块的原理和代码精讲。该模块借鉴“目标识别”领域先进理念,采用“定位-识别”二段模式,有效提高了自然环境下条码识别的准确率并保持了C++代码的高速度,相比较常用的zxing和zbar在准确率和识别速度上均有较大优势。更难得可贵的是在代码的实现过程中能够注意细节,在诸如“循环测试确定参数数值”“积分图的使用”“倾斜矩形纠偏”等处,均提供了思路清晰、弹性高的优质代码。作为一套通过了OpenCV官方的代码检验、解决一个常用领域内具体问题的模块,对于图像处理学习来说是难得可贵的。    逐条进行代码解读繁琐且低效,个人认为,在图像处理领域,能够运行和修改观察的代码对于学习研究至关重要。在理论剖析部分,也是由应用引导原理。同时做好知识的迁移和代码的复用工作。在这个过程中,创建针对性的实验非常重要。 课程内容分为4个部分:一是基本配置,包括· 条形码识别模块的安装使用 (cmake配置和OpenCV编译);· 构建用于测试和代码阅读的环境;· 模块对官方数据集的测试;二是条码定位,将详细讲解思路、原理和实现知识迁移部分将简单说一下在毛发识别上的迁移:三是条码识别,该部分内容会首先梳理框架,而后具体进行分析讲解    此外,我们将结合例子,将OpenCV的基础功能,包括积分图像、形态学变化、联通区域、透视变化等进行复习,加深理解。 

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧