- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
如果我在 C++ 中有多个链接的 C++ 静态链接库,如果它们是使用不同的启用/禁用运行时类型信息 (RTTI) 值编译的,它们是否可以共享(传入和传出函数)类对象?
--编辑:感谢您的回复,我担心的具体事情是1. 启用 RTTI 是否会改变静态(非多态类型)的 sizeof 行为?
并且,2. 如果我在支持 RTTI 的库中创建一个类并将其传递给另一个不支持 RTTI 的库,虚拟方法是否正常工作。 (反之亦然)
最后3. 如果我在支持 RTTI 的库中创建一个类,我希望能够对其使用 dynamic_cast,如果我将该对象传递给不支持 RTTI 的库,我是否仍可以在那个 对象。 ...我假设不会,而且这似乎是个坏主意...我只是好奇。
最佳答案
如何存储 RTTI 信息是一个实现细节,因此不能跨不同的编译器移植。
此外,大多数编译器甚至不保证使用不同标志编译的对象将为其方法使用相同的 ABI。这在发布和调试库中表现得最为突出,但其他标志也可能导致差异。
不仅函数/方法的 ABI 可能会发生变化,而且标志会影响编译器在结构中的元素之间使用的填充,因此即使没有虚拟方法的对象在使用不同的标志编译时也可能不兼容。
当使用大多数 IDS 时,您可以看到效果。调试/发布二进制文件构建到单独的目录中,并且仅链接到相同类型的二进制文件(而且任何用户定义的构建都将构建到单独的唯一目录中,因为标志的差异可能导致不兼容)。如果您在构建中更改某些标志,那么整个项目通常会被迫重新构建。
关于c++ - 在 C++ 中混合 RTTI 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1490593/
我需要能够从非 RTTI 代码派生一个类到 RTTI 代码项目中。我正在使用 LLVM,它在代码中禁用了 RTTI。我知道我不能对他们的代码执行 typeinfo 和 dynamic_cast,这没关
我有一个解决方案来构建一个在其项目属性中启用运行时类型信息的 DLL。这是 Visual Studio 2005 中的默认值 (/GR)。在我们的库中,我们有很多 dynamic_cast,因此我目前
我正在尝试使用 boost 序列化来序列化具有 Plain-old-Data 类型的简单类。但是,我唯一的要求是不能使用 RTTI。因此,我正在使用 gcc 4.4.1 for ARM Linux 和
我在我的测试应用程序中使用了一些 LLVM 静态库和 boost::program_options。问题是使用 LLVM 库的源代码应该用 -fno-rtti 编译(llvm-config -cxxf
我的功能模块在运行时接收一个表名和一个列名。 我想获取列的长度:透明表中允许有多少个字符? 我用我最喜欢的搜索引擎找到了RTTS . 但是文档中的示例将变量传递给 RTTS 方法 DESCRIBE_B
我想知道如何在 C++Builder 2010 中使用 TRttiMethod 类的 Invoke 方法。 这是我的代码 Tpp *instance=new Tpp(this); TValue *ar
假设我有: type TClassA = class function prova: integer; virtual; function provaSuA: integer; virtua
我尝试使用 Delphi 2010 编写一种对象/记录序列化程序,并想知道是否有一种方法可以检测记录是否是变体记录。例如。 Types.pas 中定义的 TRect 记录: TRect = recor
我有这样的类(class) TuserClass = class private FUtilisateurCode: string; FUtilisateurCle: string; public
给定一个包含类型名称的文本字符串,是否有某种方法可以获取适当的类型本身? 我想做这样的事情: type TSomeType = class // yadda yadda end; pr
不允许使用此代码: class constructor TOmniMultiPipelineStage.Create; var RTTIType: TRttiType; begin RTTIT
我在使用 rtti 获取有关泛型类型的类字段的信息时遇到问题。经过一番谷歌搜索后,我在 QC 中找到了一个条目描述问题。我的问题是,是否有人知道解决方法,或者是否已修复 Delphi XE2。以下是
正如Rtti data manipulation and consistency in Delphi 2010中已经讨论的那样可以通过使用一对 TRttiField 和实例指针访问成员来达到原始数据和
我想使用 RTTI 在设计时而不是运行时检查项目源文件中包含的类型。 据我所知,这是不受支持的,但 this question 评论中的讨论表明这是可能的,并且已经用于多个 Delphi 版本。这是我
如何在 delphi (XE4) 中通过 Rtti 释放对象的字段? 我需要动态释放所有字段 我可以找到字段,但我现在不知道如何释放它们: destructor TKnBase.Destroy; va
我制作了一个非常通用的单元,其中的设置对象都是 TObject,我不想使用任何单元,这就是我这样做的原因。所以我的做法是使用RTTI来调用一切。但现在我面临一个问题,我可以调用所有函数并给出参数和所有
RTTI 被认为是糟糕设计的原因是什么? Stroustrup 在他的书 TC++PL 中写道,最常见的使用 RTTI 技术的情况是使用 switch 指令,当人们想要根据传递对象的“真实”类型来决定
我看到了一些关于避免 RTTI 的问题,但我的问题似乎更具体一些。这是一个示例案例: struct Base {}; struct A : Base {}; struct B : Base {}; s
我一直在寻找一种方法来解决动态转换类型检查的缓慢问题。在你开始说我应该重新设计一切之前,让我告诉你,设计是 5 年前决定的。我无法修复之后的所有 400,000 行代码(我希望我可以),但我可以进行一
我在 MS Visual Studio Express 2012 中编写了这段代码以查看 rtti 行为。 但它没有按预期工作。 我的代码有什么问题? Shape.h class Shape { pu
我是一名优秀的程序员,十分优秀!