问题标签 [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.
delphi - 如何链接“并行”类层次结构?
我有一个小的类层次结构,其中每个类对应于某个 TComponent 后代(例如基类 TDefaultFrobber,其后代 TActionFrobber 和 TMenuItemFrobber,分别对应于 TComponent、TCustomAction 和 TMenuItem)。现在我想要一个工厂(?)函数是这样的:
我可以以某种方式重构它以使用虚拟函数或类似的东西而不是 if-else 级联或 RTTI 吗?
编辑:我现在的解决方案:
感谢 Cesar、Gamecat 和 mghie。
c++ - RTTI 有多贵?
我知道使用 RTTI 会造成资源损失,但它有多大?我所看到的所有地方都只是说“RTTI 很昂贵”,但它们实际上都没有提供任何基准或定量数据来保护内存、处理器时间或速度。
那么,RTTI 到底有多贵?我可能会在只有 4MB RAM 的嵌入式系统上使用它,因此每一位都很重要。
编辑:根据 S. Lott 的回答,如果我包括我实际在做的事情会更好。 我正在使用一个类来传递不同长度的数据并且可以执行不同的操作,因此仅使用虚拟函数很难做到这一点。似乎使用几个dynamic_cast
s 可以通过允许不同的派生类通过不同的级别来解决这个问题,但仍然允许它们完全不同的行为。
据我了解,dynamic_cast
使用 RTTI,所以我想知道在有限的系统上使用它是多么可行。
delphi - Delphi 的完整 VCL 类浏览器
还记得过去与 Delphi 一起出现的旧类层次结构海报吗?
我想要一个完整的类层次结构浏览器,用于我所有的 Delphi 类,包括我在调色板上构建和安装的自定义类,以及第三方组件。理想情况下,可以通过类名轻松搜索(包括“仅整个单词”搜索,因此不计算部分匹配)。
我只看到了两件接近的事情:
1) GExpets 类浏览器 - 效果很好,但不会自动加载所有已安装的组件/类,这正是我想要的。据我所知,您必须手动导入所有源单元......这可能很麻烦。它也不允许“仅整个单词”搜索,因此有时搜索带有通用“子名称”的类需要很长时间。
2)Eagle / DevExpress CDK - 它自动加载完整的类列表,并且看起来工作得很好,但它只能在 D7 和更早版本中使用,它并没有真正专注于成为一个类浏览器本身,而是“继承自“选择器。
有什么东西已经这样做了吗?如果不是,那么编写一个至少构建一个自引用类名表的应用程序会有多困难,所以我至少可以将它放入数据库/树视图组件中以轻松查看继承/祖先等。 ?
delphi - 如何创建一个类的新实例?
我有各种类实例的列表。我需要能够在不知道要创建什么的情况下创建一个类的新实例。所有涉及的对象都具有相同的祖先。对象成员变量的实际复制很容易......这是我遇到问题的新对象的创建。
诚然,我可以做这样的事情:
这不符合“开放/封闭原则”。
最初我以为我可以做类似“Result:=MyObjectTypeInstance.Create;”的事情 但是由于析构函数的困难,这并没有像希望的那样工作。
这是我应该怎么做的最新猜测......
我会认为这会更容易!
感谢您的帮助!
delphi - 如何获取自定义属性的属性类型名称?
在 Delphi 2007 中,我为我的项目添加了一个新的字符串类型:
此属性用于类中:
在运行时,我想使用 RTTI 获取属性 FirstName 的名称。我希望它是 String40:
但是,在此示例中,PropTypeName 是“字符串”。我需要做什么才能获得正确的属性类型名称“String40”?
delphi - 如何检测 Delphi 类是否具有虚拟构造函数?
例如,有没有办法找出这个类有一个虚拟构造函数(在运行时)?
例如,在这段代码中,我想测试 Clazz 引用的类是否具有虚拟构造函数:
是否有一个简单的解决方案,例如使用 RTTI,它适用于 Delphi 6 到 2009?
c++ - C++ RTTI 继承导致类大小增加
在 C++ 中,问题很简单。
我有 2 个类,其中一个包含另一个作为其实现的一部分。
现在的问题是,当我执行 sizeof(B) 和 B 类型的对象时,如果 A 是 B 的一部分,则结构 B 大一个字节。A 100% 只包含非虚拟成员(不需要虚拟表)并且不需要 typeid 检查。有什么办法(比如编译器指令)从 B 中完全删除不需要的字节,但仍然通过 B 访问 A 的成员函数?
我只能假设额外的字节是编译器将 char* 添加到 A 的名称“A”,但任何其他想法都会有所帮助。
delphi - 如何检查 Delphi 类是否被声明为抽象类?
在 Delphi 中是否可以使用 RTTI(或其他东西)来检查一个类是否被声明为抽象?就像是:
c++ - 何时以及为什么会生成 std::__non_rtti_object 异常?
我正在使用 Visual Studio 并执行有效的动态转换。RTTI 已启用。
编辑:更新代码更真实
我的调试器说在抛出异常时 in_ptr 是正确的类型。谷歌似乎特别没有帮助。有任何想法吗?干杯。
delphi - 变体内容类型的字符串表示?
首先,为我的英语道歉,我希望我在这里写的东西有意义。现在到我的问题。
如何使用 TypInfo.GetEnumName() 获取 Variant内容类型的字符串表示形式。我尝试了以下方法,但没有运气,我得到了一个数字表示。
谢谢你。