CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ObjectARX 开发指南

运行时类标识

2022-12-31 23:00| 发布者: admin| 查看: 333| 评论: 0|来自: AutoCAD

派生自 ObjectARX 层次结构中的每个类都有一个相应的类描述符对象,该对象是保存运行时类型标识信息的实例。类描述符对象是类的静态数据成员,例如。类描述符对象是在初始化时创建的,当类向 ObjectARX 注册并添加到系统级字典时。此处描述的宏有助于声明和实现与运行时标识和初始化函数相关的某些函数。其中包括类初始化例程以及自定义类的 、 和函数。AcRxObjectAcRxClassgpDescAcDbEllipse::gpDescacrxClassDictionarydesc()cast(),isKindOf()isA()

该类提供的用于运行时类型标识的重要函数包括:AcRxObject

  • desc(),一个静态成员函数,它返回特定(已知)类的类描述符对象。
  • cast(),一个静态成员函数,它返回指定类型的对象,或者如果该对象不属于必需的类(或派生类)。NULL
  • isKindOf()返回对象是否属于指定的类(或派生类)。
  • isA()返回类未知的对象的类描述符对象。

当您想知道对象是什么类时,请使用。此函数返回数据库对象的类描述符对象(实例)。它的签名是AcRxObject::isA()AcRxClass

AcRxClass* isA() const;

当你已经知道对象是什么类时,你可以使用 function 来获取类描述符对象:desc()

static AcRxClass* desc();

下面的示例查找实例 o对于从它派生的任何类,usingand 静态成员函数: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.
}

下面的示例查找 usingand 派生自 usingand 的类的实例,但不查找类的实例:AcDbEllipseAcDbEllipseisA()AcDbEllipse::desc()

if (curEntity->isA() == AcDbEllipse::desc()) {
   // Got an AcDbEllipse, no more, no less.

路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )

GMT+8, 2024-5-19 15:00

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部