问题标签 [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 回答
626 浏览

c++ - 关于 std::type_info 中的反射扩展的一般感觉是什么?

我注意到反射是其他语言的开发人员发现 C++ 中非常缺乏的一项功能。对于某些应用程序,我真的明白为什么!如果您有反射,编写诸如 IDE 的自动完成之类的东西要容易得多。当然,如果我们拥有序列化 API,世界将会变得更容易。

另一方面,C++ 的主要原则之一是不为不使用的东西付费。这是完全有道理的。这就是我喜欢 C++ 的地方。

但在我看来,可能会有妥协。为什么编译器不向std::type_info结构添加扩展?不会有运行时开销。二进制文件最终可能会更大,但这可能是一个简单的编译器开关来启用/禁用,老实说,如果你真的关心空间节省,你可能会禁用异常和 RTTI。

有些人引用了模板的问题,但编译器已经很高兴地std::type_info为模板类型生成了结构。

我可以想象一个像-fenable-typeinfo-reflection这样的 g++ 开关可能会变得非常流行(并且像 boost/Qt/etc 这样的主流库可以很容易地检查生成使用它的代码(如果有的话),在这种情况下,最终用户将受益于没有比翻转更多的成本一个开关)。我不觉得这是不合理的,因为像这样的大型可移植库已经依赖于编译器扩展。

那么为什么这不是更常见的呢?我想我错过了一些东西,这有什么技术问题?

编辑:只有几个指标重新膨胀论点:

我查看了一个相当大的 Qt 项目(大约 45,000 LoC)并测量了元对象的大小。我觉得这是一个合理的度量标准,因为 Qt moc 系统是一个相当详尽的反射系统(类型、函数、枚举、成员和一些 Qt 特定的概念,如“属性”)。总共有67 个元对象,所以不是一个微不足道的数量,但也没有什么疯狂的,加起来是 5479 字节。然而,几乎所有这些都是 32 字节或更少(最大的是 1427 字节)。考虑到即使是最简单的程序,现代编译器也会生成超过 4K 的二进制文件,这些数字并不离谱)。虽然我很想看到这样的东西适用于STL看看它是如何公平的。

0 投票
4 回答
9942 浏览

delphi - 使用 TValue 将字符串转换为枚举类型?

我想使用 TValue 将字符串转换为枚举类型,我用谷歌搜索但我没有找到如何做到这一点。

它不起作用。那一定是我没有看到的愚蠢的东西——但我没有找到它。我做错了什么?

我知道如何使用 GetEnumValue。

编辑:@Warren,它放在这里,因为这更容易发布代码:

用法:

0 投票
1 回答
1037 浏览

delphi - Delphi - 有关记录中方法的 RTTI 信息

如何提取有关 Delphi 记录中方法的 RTTI 信息?是否可以使用新的 Rtti 单元?

0 投票
1 回答
1565 浏览

delphi - Delphi:2010 年索引属性的 RTTI?

请原谅以下代码示例的冗长。使用 Delphi 2009,我创建了两个类 TOtherClass 和 TMyClass:

访问说明符实现为

它的使用可以说明如下:

别介意这种“设计”的明显缺陷。我意识到我希望能够通过 RTTI 访问属性 IndxProp,随后将 IndxProp 移至已发布部分。令我失望的是,我发现已发布部分中不允许索引属性。据我了解(请参阅 Barry Kellys 在How do I access Delphi Array Properties using RTTI上的评论),迁移到 D2010 不会让我这样做。

另一方面,以下引自Robert Loves 博客:“...属性和方法现在可通过 RTTI 在公共部分和已发布部分中使用,并且字段在所有部分中都可用。” (我的斜体。)

我的问题是:如果确实可以在 D2010 中为公共字段获取 RTTI,那么我的原始示例(如上所示)不应该在 D2010(使用 RTTI)中工作吗?提前致谢!

0 投票
2 回答
1093 浏览

delphi - Delphi 2010:TRTTIConstructor 发生了什么?

我有两个问题(其中至少一个是关于 D2010 中的 RTTI 和动态实例化)

  1. 我正在阅读巴里·凯利(Barry Kelly)在一次会议上发表的演讲的衬托,并在第 4 页上找到。13 看起来很有趣的东西:TRTTIConstructor.Invoke。在相邻的要点中,可以找到“动态构造实例而不需要虚拟构造函数和元类”。这似乎是一个很棒的功能(这正是我需要的,顺便说一句)!但是,当我查看 D2010 文档 (ms-help://embarcadero.rs2010/vcl/Rtti.html) 时,我找不到它。被撤销了吗?
  2. 如果类名存储在字符串中,那么创建类实例的最小方法是什么?
0 投票
1 回答
786 浏览

java - 在 Java 中避免 RTTI

如果我有一个超类,比如说Animal

和两个子类:斑马长颈鹿

如果我决定定义一个动物向量:

我想说:你可以加长颈鹿,但你必须先拥有至少一只斑马

不使用 RTTI 的最佳方法是什么?(实例

0 投票
2 回答
3269 浏览

delphi - Delphi:如何使用 DynArraySetLength 设置 RTTI 访问的动态数组的长度?

我想按照这篇文章中的建议设置动态数组的长度。我有两个类 TMyClass 和相关的 TChildClass 定义为

数组扩充实现为

作为 D2010 RTTI 的新手,我怀疑错误可能取决于从类实例中获取 ArrValue,但随后的WriteLn打印结果为“TRUE”,所以我已经排除了这一点。然而,令人失望的是,同样的WriteLn报告称 ArrValue 的大小为 0,这得到了“索引超出范围”的确认 - 我在尝试设置数组中的任何元素时遇到的异常(通过ArrValue.SetArrayElement(i, Value);)。有谁知道我在这里做错了什么?(或者也许有更好的方法来做到这一点?)TIA!

0 投票
1 回答
382 浏览

dll - C++ DLL 注入获取结构值

我正在尝试注入一个为其中一个参数发送 void ** 的 dll。

void ** 可以包含在应用程序中创建的结构。

有没有办法从结构中获取数据。

0 投票
2 回答
3619 浏览

delphi - Delphi:RTTI 和 TObjectList

根据对较早帖子的一个回答,我正在调查以下设计的可能性

现在,在现实世界中,TMyClass 将有 10 个这样的不同列表,所以我希望能够使用 RTTI 来处理这些列表。但是,我对这个类的其他字段不感兴趣,所以我需要检查某个字段是否是某种 TObjectList。这是我到目前为止所得到的:

很明显,RField.FieldType <> RObjListType.FieldType. 但是,他们确实有一些关系,不是吗?对常见功能进行非常精细的检查以使其很可能RField.FieldType实际上是TObjectList.

老实说,我对泛型感到很不舒服,所以这个问题可能非常幼稚。但是,我很乐意学习。上述解决方案是否可以实施?蒂亚!

0 投票
2 回答
338 浏览

c++ - 使用 Visual Studio .ncb 文件进行反射

我正在用 C++ 开发视觉游戏关卡编辑器。为此,我希望反射(RTTI)机制在运行时知道类属性。我目前正在为此使用 PDB 文件。但是使用 PDB 我无法检索实际代码行以获取为该属性提供的注释格式的额外信息。Visual Studio 将 NCB 文件用于智能。那么使用 NCB 代替 PDB 会更好吗?如果是,如何从 NCB 文件中检索信息?有没有像 DIA SDK 这样的 SDK?