(C )找到基本类型指针的儿童类型
(C++) Finding the child type of a base type pointer
i有一个class Base
和4类A
,B
,C
,D
,每个类别均来自Base
。我将指针Base*
传递给功能。
我知道我可以使用dynamic_cast
检查每种单独的孩子类型。为了找出该指针是哪种类型,我必须使用4 if语句是不实际的。
这可以以其他更优雅的方式完成吗?
- 或者我应该在每个子类中保留一个
const int
变量,以表明其类型为简单呼叫GetType()
? - 或我应该专注于确保有存储空间时 - 例如库存和
A
,B
,C
,D
是不同类型的项目 - 项目本身(以便当我有4个列表时,项目将自己放在适当的列表上,而不是拥有管理库存的函数,检查项目的类型,然后将其放在右边的列表中(吗?
还是我应该在每个子类中保存const int变量,以表明其类型为简单呼叫getType((?还是我应该专注于确保当我拥有存储空间时 - 例如库存和a,b,c,d是不同类型的项目 - 项目本身(以便当我有4个列表时,新项目都放置本身在适当的列表上,而不是具有管理库存的函数,检查项目的类型,然后将其放在右边的列表中(?
(
都不是。您应该正确设计基类的接口,因此,当您使用指针到基类的指针时,您不需要知道它是哪种实际类型,只需使用接口即可。由于问题中没有足够的信息,因此很难为您提供更多细节。
注意:直接使用dynamic_cast
或具有模拟它的功能(例如,从虚拟函数返回枚举,例如为您提供特定类型(几乎总是设计不当的迹象,尽管有时由于某些技术原因,您有时可能会使用该快捷方式。但是设计您的应用程序并思考如何从开始中检测实际类型 - 肯定是错误的设计方法。
Note2:我以为您正在使用继承和虚拟功能,因此您正在做面向对象的设计。尽管C 是一种多范式语言,您可以解决您的问题不同的方式。例如,您可以将std::variant
带有类型A
,B
,C
和D
枚举,并使用visitor
单独或使用模板功能来单独或一般处理每种类型。但这与OOD不同,在这种情况下,您的课程可能不需要共同的基础。当然,您可以将它们混合在一起,但通常不会导致良好的设计。当您混合不同的范式时,您会从每个范式中获得最差。
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 如何访问在 c++ 中在类内声明的结构类型指针变量?
- (C )找到基本类型指针的儿童类型
- 表达式必须具有指向对象的指针类型(指针向量)
- 将子项复制构造到父类型指针中
- C 返回类型指针声明
- 调用虚拟函数而不通过类类型指针创建任何对象
- C++ 如何使用类类型指针制作向量
- 为什么基类型指针不能获取派生类对象的地址值?
- 如何在 C++ 中获取映射类型指针,映射
- 如何检查该类型的类型指针是正确对齐的
- 正在转换为短类型指针
- 指向任意类方法的模板非类型指针
- 如何通过强制转换类型指针将字符数组转换为uint16_t
- 指向shared_ptr的不透明类型 C 指针
- C++:从值类型指针强制转换为包含迭代器
- C/C++:访问给定类型指针的位置与访问另一类型指针的相同位置不同
- 比较类型指针
- 数据类型指针使用*(Datatype *)
- 如何打印c++中char类型指针的所有值