问题标签 [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 投票
2 回答
4429 浏览

c++ - C++ 最简单的 RTTI 实现是什么?

我正在尝试为嵌入式操作系统实现异常处理,但我被困在如何检测抛出的“异常”的类型(以选择适当的处理程序)。

异常处理的保存和恢复上下文部分已经完成,但我不能有特定的句柄,因为我无法检测到抛出的“异常”的类型。c++ 的标准 RTTI 实现过于依赖其他库,因此我目前认为它不可用。

考虑到我的目标是嵌入式系统,因此我无法创建太多代码,我可以获得(或制作)的“运行时类型信息”的最小实现是什么?

- 编辑 -

我不在编译器上工作,它是一个 ia32-g++。

0 投票
2 回答
1406 浏览

delphi - 如何使用 RTTI 访问 Delphi 数组属性

我熟悉使用 Delphi RTTI 访问“简单”属性(整数/枚举/字符串等),但我无法掌握如何使用 Array 属性。

我首先为 GetPropValue/SetPropValue 调用寻找数组等效项。我希望看到与这些类似的,但采用额外的“索引”参数,但似乎在 typinfo 单元帮助中找不到任何内容。

0 投票
1 回答
1539 浏览

delphi - 如何在运行时获取接口的名称?

如果我有一个实现接口的对象,使用RTTI查找接口并获取它的GUID并不太难。但是,如果我想要它的名字,有没有办法得到它?获取类的名称很简单,但对于接口来说,它似乎有点棘手......

0 投票
2 回答
1048 浏览

visual-studio - 是否允许在禁用 rtti 的应用程序中链接启用 rtti 的 DLL?

我有一个解决方案来构建一个在其项目属性中启用了运行时类型信息的 DLL。这是 Visual Studio 2005 中的默认值 (/GR)。在我们的库中,我们有很多 dynamic_casts,所以我目前无法在没有运行时类型信息的情况下构建 DLL。

现在我的客户正在使用 Dassault Systèmes 的开发工具,该工具声明他们不能使用运行时类型信息。它始终被禁用 (/GR-)。

问题是这是否是一个问题?

我用一个小例子尝试了这种情况,在这个例子中,一个 DLL 是用一些代码进行动态转换创建的。DLL 是在启用 RTTI 的情况下构建的一个小型应用程序使用 DLL,尤其是带有 dynamic_casts 的代码。此应用程序内置 RTTI禁用。它工作正常。但是由于不可预测的行为,任何事情都可能发生......

我想告诉我的客户,将 DLL 与其中一些使用 RTTI 和其他不使用 RTTI 混合不是问题,但我找不到有关它的详细信息(使用 Google、MSDN 等)。有谁知道这个问题的答案?

0 投票
7 回答
4294 浏览

delphi - 序列化 Delphi 应用程序配置的最佳方法是什么?

我会自己回答这个问题,但如果你比我快或者你不喜欢我的解决方案,请随时提供你的答案。我只是想出了这个想法,并想对此发表一些意见。

目标:一个可读的配置类(如 INI 文件),但无需编写(并在添加新配置项后适应)加载和保存方法。

我想创建一个类

调用 TMyConfiguration.Save(从 TConfiguration 继承)应该创建一个类似的文件

问题:最好的方法是什么?

0 投票
2 回答
468 浏览

delphi - 如何在任意类型上调用 GetEnumerator?

我正在编写一个应该能够显示任何数据列表的控件。我想要做的是模仿 for-in 构造,因为我检查包含 Current 属性和 MoveNext 方法的公共 GetEnumerator 函数。

我已确定以下内容:

  1. 我可以通过简单地在我的对象上调用 MethodAddress 来检查方法的存在。如果我得到地址,则该方法存在。
  2. 我可以使用 RTTI 来检查方法的返回类型。
  3. 我可以使用 RTTI 来检查属性并读取它。

不过,在这两者之间,我缺少一些信息:

  1. 给定地址,我如何调用该方法?我只是写一个定义(就像我会为导入一样),转换地址并调用它吗?
  2. 检查方法的返回类型需要使用其 PTypeInfo 调用 GetTypeData。我通过在类型上调用 TypeInfo 来获取 PTypeInfo。那么我如何获得给定方法的 PTypeInfo,只给定它的地址呢?
0 投票
4 回答
350 浏览

c++ - 有没有办法在运行时确定对象是否可以在 C++ 中执行方法?

在 Perl 中,有一个 UNIVERSAL::can 方法可以调用任何类或对象来确定它是否能够做某事:

假设我在 C++ 中有一个基类指针,它可以是许多不同的派生类中的任何一个,有没有一种简单的方法来完成类似的事情?我不想触及其他派生类中的任何内容,我只能更改基类中调用该函数的区域,以及支持它的一个派生类。

编辑:等等,这现在很明显(不要管这个问题),我可以在返回一个代表 UNIMPLEMENTED 的数字的基础中实现它,然后在调用它时检查返回不是这个。我不知道为什么我会以如此复杂的方式思考事情。

我还想我会从另一个实现的类中派生出我的类,foo然后看看对这个类的动态转换是否有效。

0 投票
4 回答
6951 浏览

c++ - 用于遍历继承层次结构的静态转换与动态转换

我看到一本关于 C++ 的书提到,使用静态转换导航继承层次结构比使用动态转换更有效。

例子:

但是,动态转换和静态转换(如上面实现的)都需要启用 RTTI 才能使此类导航正常工作。只是动态转换需要类层次结构是多态的(即基类至少有一个虚函数)。
静态演员的这种效率提升从何而来?这本书确实提到动态转换是进行类型安全向下转换的首选方式。

0 投票
2 回答
1617 浏览

delphi - 如何将接口变量分配给 Rtti.TValue 类型的变量

目前我给delphi2010试用了一下,发现Rtti Unit的TValue类型。TValue 具有非常有趣的功能,但我找不到分配接口的方法。

我尝试以下

我找不到任何进一步的信息。不在德尔福帮助系统中,也不在互联网上。我做错了什么?

0 投票
2 回答
4335 浏览

delphi - 基于RTTI信息的Delphi调用方法

大家好,首先对不起我的英语不好。考虑以下(不是实际代码):

我正在使用 RTTI 设置“MyOtherClass”属性。对于字符串属性很容易,但我的问题是:

如何获取对“数据”(MyClass)属性的引用,以便调用该Go()方法?

我想做这样的事情(伪代码):

(如果这只是 C# :( )

PS .:这是在delphi 7中(我知道,甚至更糟)