CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoCAD 2023 开发者帮助

运行时类标识

2024-5-18 19:00| 发布者: admin| 查看: 134| 评论: 0|原作者: admin|来自: AutoCAD

运行时类标识

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

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

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

当您想知道对象是什么类时,请使用 .此函数返回数据库对象的类描述符对象(实例 )。它的签名是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.

路过

雷人

握手

鲜花

鸡蛋

最新评论

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

GMT+8, 2025-3-14 07:56

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部