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

delphi - Delphi:防止方法名称出现在可执行文件中

我正在编写一个类来处理我的可执行文件中的安全性(检查序列、试用日期检查等)。编译可执行文件后(即使在发布版本中,关闭所有调试和 RTTI 生成),当我在记事本中打开它并在原始数据中搜索方法名称时,我可以看到组装我的类的所有方法的名称. 代码库中的任何类中都没有已发布的成员。

这对保护不利。有没有办法告诉 Delphi 不要在可执行文件中存储方法名称?如果不需要 RTTI 且没有 COM 爆炸,为什么还要存储它们?有没有控制这个的编译器选项?

目标可执行文件中任何类的任何方法都可能以文本形式存储在可执行文件中。显然,这是由于 Delphi 2010 中所有类默认打开扩展 RTTI 造成的。

0 投票
2 回答
2684 浏览

delphi - 如何使用 rtti 将 NULL 设置为 Variant 字段

我在使用 rtti 将 null 设置为变体字段时遇到问题。

假设我有这样的课程:

当我访问 Field1 时,我可以这样做:

但似乎我不能用 Field2 做到这一点:

或者

所以,我想要的是能够将空值设置为上面类的 Field2。可能吗?任何想法,将不胜感激。

戈兰

0 投票
1 回答
1531 浏览

delphi - 枚举所有实现给定接口的 Delphi 类?

使用 Delphi 2010 中新的扩展 RTTI,Delphi 应用程序(在运行时)能否构建实现给定接口的所有类的列表?

0 投票
7 回答
8990 浏览

delphi - 为什么我要关心 Delphi 中的 RTTI?

我听说过很多关于Delphi 2010 的新的/改进的 RTTI 功能,但我必须承认我的无知......我不明白。我知道 Delphi 的每个版本都支持 RTTI……而且我知道 RTTI(运行时类型信息)允许我在应用程序运行时访问类型信息。

但这究竟是什么意思Delphi 2010 的 RTTI 是否支持与.NET 中的反射相同的东西?

有人可以解释为什么 RTTI 有用吗?假装我是你的尖头发老板,帮助我理解为什么 RTTI 很酷。我如何在实际应用程序中使用它?

0 投票
4 回答
3298 浏览

c++ - 为什么从类到子类的动态转换需要类是多态的?

据我了解,动态转换与静态转换的不同之处在于它对 RTTI 的使用,并且如果变量的动态类型(从基转换为派生时)不适合,它会失败。但是,如果我们有 RTTI,为什么类必须是多态的呢?

编辑:由于对“多态”一词的使用存在一些混淆,因此 cplusplus.com 中的条目提示我问这个:

dynamic_cast 只能与对象的指针和引用一起使用。其目的是确保类型转换的结果是所请求类的有效完整对象。

因此,当我们将一个类转换为它的基类之一时,dynamic_cast 总是成功的

这段代码中的第二次转换会产生编译错误,因为dynamic_cast 不允许基类到派生的转换,除非基类是多态的。

http://www.cplusplus.com/doc/tutorial/typecasting/

0 投票
2 回答
1515 浏览

c++ - 如何使用 RTTI 从父对象的集合(向量)中获取对象类型

我有一个基类,它有两个从它派生的子类。

我有另一个类,它有一个使用向量指向 A 类成员集合的指针,如下所示:

我所做的是创建 B 或 C 类的对象并使用 push_back 将它们添加到集合中:

然后我遍历集合并尝试使用'typeid'进行检查,但它总是返回基类(A)。不可能知道确切的类型吗?

谢谢!

0 投票
1 回答
1392 浏览

delphi - 在运行时使用 RTTI 在 Delphi 中查找所有类助手?

Delphi 2010 中的扩展 RTTI 是否提供了一种在运行时列出定义的类和记录助手的方法?

据我所知,当为一个类定义多个类助手时, Delphi不会显示提示或警告,类助手检测可能是“质量保证”中的一个有用例程。

ps 当然我知道我永远不应该在没有源代码的情况下使用第三方组件或库,这将使 grep 类助手变得容易。

0 投票
4 回答
1108 浏览

c++ - 没有 RTTI 的类型相等性测试

BC都源自A。我希望能够在不使用 RTTI的情况下测试派生类的任何两个实例是否A是同一类的实例,即是否A* fooA* bar指向实例。B我目前的解决方案是这样的:

使用这种方法,operator==可以简单地测试first.code() == second.code()。我想identity从派生类中删除文字并让代码自动找到A,因此并非所有派生类都必须重复这个习语。同样,我强烈不希望使用 RTTI。有没有办法做到这一点?

注意:我看过最近的问题[1][2],这不是重复的。那些张贴者想要测试他们的派生类的内容;我只是想测试身份

0 投票
2 回答
2589 浏览

delphi - 如何使用 TValue.AsType适当地?

我正在尝试使用 RTTI 向控件添加事件处理程序,该控件可能已经设置了事件处理程序。代码看起来像这样:

我想要这个,所以我可以在 MyOnChange 中执行此操作:

不幸的是,编译器似乎不喜欢这条线FOldOnChange := val.AsType<TNotifyEvent>;。它说

E2010 不兼容的类型:“过程、无类型指针或无类型参数”和“TNotifyEvent”

任何人都知道这是为什么或如何解决它?在我看来是对的...

0 投票
3 回答
3413 浏览

c++ - 基于模板参数在 C++ 中模拟动态调度

为了这个问题,这被大大简化了。假设我有一个层次结构:

我想要一个带有签名的非模板函数:

a其中函数结果的具体类型与b其中较大者的类型相同Precision;类似于以下伪代码:

其中A和分别是和B的具体类型。我想独立于有多少实例进行操作。我想避免使用大量的比较表,尽管 RTTI 的答案很好。有任何想法吗?abfunctionDerivedtypeid()