问题标签 [rtti]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
666 浏览

delphi - 如何链接“并行”类层次结构?

我有一个小的类层次结构,其中每个类对应于某个 TComponent 后代(例如基类 TDefaultFrobber,其后代 TActionFrobber 和 TMenuItemFrobber,分别对应于 TComponent、TCustomAction 和 TMenuItem)。现在我想要一个工厂(?)函数是这样的:

我可以以某种方式重构它以使用虚拟函数或类似的东西而不是 if-else 级联或 RTTI 吗?

编辑:我现在的解决方案:

感谢 Cesar、Gamecat 和 mghie。

0 投票
11 回答
80042 浏览

c++ - RTTI 有多贵?

我知道使用 RTTI 会造成资源损失,但它有多大?我所看到的所有地方都只是说“RTTI 很昂贵”,但它们实际上都没有提供任何基准或定量数据来保护内存、处理器时间或速度。

那么,RTTI 到底有多贵?我可能会在只有 4MB RAM 的嵌入式系统上使用它,因此每一位都很重要。

编辑:根据 S. Lott 的回答,如果我包括我实际在做的事情会更好。 我正在使用一个类来传递不同长度的数据并且可以执行不同的操作,因此仅使用虚拟函数很难做到这一点。似乎使用几个dynamic_casts 可以通过允许不同的派生类通过不同的级别来解决这个问题,但仍然允许它们完全不同的行为。

据我了解,dynamic_cast使用 RTTI,所以我想知道在有限的系统上使用它是多么可行。

0 投票
3 回答
2354 浏览

delphi - Delphi 的完整 VCL 类浏览器

还记得过去与 Delphi 一起出现的旧类层次结构海报吗?

我想要一个完整的类层次结构浏览器,用于我所有的 Delphi 类,包括我在调色板上构建和安装的自定义类,以及第三方组件。理想情况下,可以通过类名轻松搜索(包括“仅整个单词”搜索,因此不计算部分匹配)。

我只看到了两件接近的事情:

1) GExpets 类浏览器 - 效果很好,但不会自动加载所有已安装的组件/类,这正是我想要的。据我所知,您必须手动导入所有源单元......这可能很麻烦。它也不允许“仅整个单词”搜索,因此有时搜索带有通用“子名称”的类需要很长时间。

2)Eagle / DevExpress CDK - 它自动加载完整的类列表,并且看起来工作得很好,但它只能在 D7 和更早版本中使用,它并没有真正专注于成为一个类浏览器本身,而是“继承自“选择器。

有什么东西已经这样做了吗?如果不是,那么编写一个至少构建一个自引用类名表的应用程序会有多困难,所以我至少可以将它放入数据库/树视图组件中以轻松查看继承/祖先等。 ?

0 投票
5 回答
7880 浏览

delphi - 如何创建一个类的新实例?

我有各种类实例的列表。我需要能够在不知道要创建什么的情况下创建一个类的新实例。所有涉及的对象都具有相同的祖先。对象成员变量的实际复制很容易......这是我遇到问题的新对象的创建。

诚然,我可以做这样的事情:

这不符合“开放/封闭原则”。

最初我以为我可以做类似“Result:=MyObjectTypeInstance.Create;”的事情 但是由于析构函数的困难,这并没有像希望的那样工作。

这是我应该怎么做的最新猜测......

我会认为这会更容易!

感谢您的帮助!

0 投票
2 回答
6767 浏览

delphi - 如何获取自定义属性的属性类型名称?

在 Delphi 2007 中,我为我的项目添加了一个新的字符串类型:

此属性用于类中:

在运行时,我想使用 RTTI 获取属性 FirstName 的名称。我希望它是 String40:

但是,在此示例中,PropTypeName 是“字符串”。我需要做什么才能获得正确的属性类型名称“String40”?

0 投票
3 回答
1765 浏览

delphi - 如何检测 Delphi 类是否具有虚拟构造函数?

例如,有没有办法找出这个类有一个虚拟构造函数(在运行时)?

例如,在这段代码中,我想测试 Clazz 引用的类是否具有虚拟构造函数:

是否有一个简单的解决方案,例如使用 RTTI,它适用于 Delphi 6 到 2009?

0 投票
2 回答
1328 浏览

c++ - C++ RTTI 继承导致类大小增加

在 C++ 中,问题很简单。

我有 2 个类,其中一个包含另一个作为其实现的一部分。

现在的问题是,当我执行 sizeof(B) 和 B 类型的对象时,如果 A 是 B 的一部分,则结构 B 大一个字节。A 100% 只包含非虚拟成员(不需要虚拟表)并且不需要 typeid 检查。有什么办法(比如编译器指令)从 B 中完全删除不需要的字节,但仍然通过 B 访问 A 的成员函数?

我只能假设额外的字节是编译器将 char* 添加到 A 的名称“A”,但任何其他想法都会有所帮助。

0 投票
2 回答
2781 浏览

delphi - 如何检查 Delphi 类是否被声明为抽象类?

在 Delphi 中是否可以使用 RTTI(或其他东西)来检查一个类是否被声明为抽象?就像是:

0 投票
5 回答
11951 浏览

c++ - 何时以及为什么会生成 std​​::__non_rtti_object 异常?

我正在使用 Visual Studio 并执行有效的动态转换。RTTI 已启用。

编辑:更新代码更真实

我的调试器说在抛出异常时 in_ptr 是正确的类型。谷歌似乎特别没有帮助。有任何想法吗?干杯。

0 投票
4 回答
6287 浏览

delphi - 变体内容类型的字符串表示?

首先,为我的英语道歉,我希望我在这里写的东西有意义。现在到我的问题。

如何使用 TypInfo.GetEnumName() 获取 Variant内容类型的字符串表示形式。我尝试了以下方法,但没有运气,我得到了一个数字表示。

谢谢你。