运行时类标识
派生自 ObjectARX 层次结构中的每个类都有一个相应的类描述符对象,该对象是保存运行时类型标识信息的实例。类描述符对象 是类的静态数据成员,例如 .类描述符对象是在初始化时创建的,当类向 ObjectARX 注册并添加到系统级字典时。此处描述的宏有助于声明和实现与运行时标识和初始化函数相关的某些函数。其中包括类初始化例程以及自定义类的 、 和 函数。AcRxObjectAcRxClassgpDescAcDbEllipse::gpDescacrxClassDictionarydesc()cast(),isKindOf()isA() 该类提供的用于运行时类型标识的重要函数包括:AcRxObject
当您想知道对象是什么类时,请使用 .此函数返回数据库对象的类描述符对象(实例 )。它的签名是AcRxObject::isA()AcRxClass AcRxClass* isA() const; 当您已经知道对象是什么类时,可以使用该函数获取类描述符对象:desc() static AcRxClass* desc(); 下面的示例使用 和 静态成员函数查找 的实例或从它派生的任何类:AcDbEllipseisKindOf()AcDbEllipse::desc() AcDbEntity* curEntity = somehowGetAndOpenAnEntity(); if (curEntity->isKindOf(AcDbEllipse::desc())) { // Got some kind of AcDbEllipse instance. } 此示例显示了使用静态成员函数查找 的实例或从中派生的任何类的另一种方法:AcDbEllipseAcDbEllipse::cast() AcDbEllipse* ellipseEntity = AcDbEllipse::cast(curEntity); if (ellipseEntity != NULL) { // Got some kind of AcDbEllipse instance. } 下面的示例查找 的实例,而不是派生自 、 和 的类的实例:AcDbEllipseAcDbEllipseisA()AcDbEllipse::desc() if (curEntity->isA() == AcDbEllipse::desc()) { // Got an AcDbEllipse, no more, no less. 父主题: |
|Archiver|CAD开发者社区
( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2025-3-14 08:52
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.