问题标签 [downcast]
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.
php - 在php5中向下转换
我已经意识到 php5 中没有向下转换。有没有共同的模式来实现它?
php - 这个 php 向下转换的解决方法有多贵
这个问题与php5中的向下转换有关
这个 php 向下转换的解决方法有多贵?
这个 php 向下转换的解决方法是否太贵了?
我已经回应了 microtimes,它似乎需要 0.001。我想知道这是否可能是大型 foreach 中的问题。
http://php.net/manual/en/language.types.type-juggling.php评论中提出的解决方案类似。
.net - 如何在 vb.net 中进行动态向下转换?
我有几个类,它们都派生自 SuperClass。
创建类时,它们都被放入一个 List(Of SuperClass) 中。当我浏览列表时,我想将 SuperClass 对象向下转换为它的 baseObject,并将其放入正确的列表中。(我为 SuperClass 的每个子类型创建了一个列表)。
可以确定:
但这是很多工作,当有几个班级时。
通过使用
我得到了子类的类型。
我的问题是:是否可以使用它来动态转换 SuperClass 对象?在伪代码中:
编辑:我希望我可以使用一个变量而不是为每个子类创建一个案例,并在一个循环中完成所有操作。
c# - 如何使用 SWIG 生成的界面在 C# 中正确向下转换?
我有一个非常庞大且成熟的 C++ 代码库,我正在尝试使用 SWIG 为其生成 C# 接口。我无法更改实际的 C++ 代码本身,但我们可以使用 SWIG 提供的任何东西来扩展/更新它。我面临一个问题,即如下编写的 C++ 函数在 C# 中引起问题。
调用者可能会执行以下操作:
本质上,遍历一个元素容器,根据它们的真实类型,做一些不同的事情。遗憾的是,SWIG 为“下一个”函数生成的 C# 层执行以下操作:
因此,C# 中的调用代码无法确定返回的对象是否实际上是派生类,它实际上似乎始终是基类(这确实有意义)。我遇到了几种解决方案:
- 使用 %extend SWIG 关键字在对象上添加方法并最终调用 dynamic_cast。在我看来,这种方法的缺点是需要您了解继承层次结构。就我而言,它相当大,我认为这是一个维护问题。
- 使用 %factory 关键字来提供方法和派生类型,并让 SWIG 自动生成 dynamic_cast 代码。这似乎是一个比第一个更好的解决方案,但是在更深入的研究中,它仍然需要您寻找它可能返回的所有方法和所有可能的派生类型。再次,一个巨大的维护问题。我希望我有一个文档链接,但我找不到。我通过查看 SWIG 附带的示例代码发现了这个功能。
- 创建 C# 方法以创建派生对象的实例并将 cPtr 传输到新实例。虽然我认为这很笨拙,但它确实有效。请参阅下面的示例。
这些真的是选择吗?如果我不愿意挖掘所有现有的函数和类派生,那么我只剩下#3了吗?任何帮助,将不胜感激。
c++ - 是否有任何 C++ 工具可以检测误用 static_cast、dynamic_cast 和 reinterpret_cast?
以下问题的答案描述了C++中static_cast
、dynamic_cast
和的推荐用法:reinterpret_cast
什么时候应该使用 static_cast、dynamic_cast、const_cast 和 reinterpret_cast?
你知道有什么工具可以用来检测这些演员阵容的滥用吗?像 PC-Lint 或 Coverity 静态分析这样的静态分析工具会这样做吗?
提示这个问题的特殊情况是不恰当地使用static_cast
来向下转换指针,编译器不会警告。我想使用一种工具来检测这种情况,而不是假设开发人员永远不会犯这个错误。
c++ - 这不是垂头丧气吗?
如果我做
我不是“垂头丧气”吗?
或者
这个术语是否仅用于类和对象?
我很困惑,因为在这种情况下,我们是从一个更大的“向下转换”double
到一个较小的int
,但是在类的情况下,我们从一个较小的“向下转换”base class
到一个更大的derived class
。
从某种意义上说,这两个约定不是相反的吗?
java - Java 向下转型和 is-A has-A 关系
你好,
我有一个向下铸造的问题,我在这方面有点生疏。我有 2 节课是这样的:
我有一个这样的方法,在一个实用程序助手类中:
其中 C 是从数据库中检索然后转换的对象。
问题是我想通过传入'C'并返回B来调用上述方法。所以我尝试了这个:
因此,即使上述方法返回 AI 尝试将其向下转换为 B,但我得到了运行时 ClassCastException。真的没有办法解决这个问题吗?我是否必须编写一个单独的 converts() 方法来返回 B 类类型?
如果我像这样声明我的 B 类:
然后我可以像这样调用我现有的方法:
这样我可以重用现有的方法,即使扩展关系更有意义。我应该怎么办?非常感谢任何帮助。谢谢。
c# - 使用向下转换浅拷贝列表
我的班级遗产如下
CEntity---->CNode--->CElement
我有一个
和
节点类包含跨不同项目的通用项目元素类具有特定于项目的项目。
我必须将元素列表浅复制到节点列表中(基本上将元素向下转换为节点)
downcast - 试图了解编译器是如何完成转换/转换的,例如,当从 float 转换为 int 时
当 float 转换为 int 时,编译器如何实现此转换。编译器是否屏蔽了浮点变量的某些内存,即编译器将哪一部分内存传递给 int 变量。
我想这个问题的答案在于 int 和 float 如何在内存中维护。
但它不是依赖于机器而不是依赖于编译器。编译器如何决定在转换为较低类型时复制哪一部分内存(这是一个静态转换,对)。
我想我对一些错误的信息感到困惑。
(我读了一些关于 tag=downcasting 的问题,关于它是强制转换还是转换的争论正在进行中,我对它的名称不太感兴趣,因为两者都是由编译器执行的,但是关于它是如何被执行的执行)。
... 谢谢
c++ - C++继承问题
我在应用程序架构中有以下问题,并愿意解决它(对不起,很多文字)。
我正在构建一个游戏引擎原型,并且我有基本的抽象类AbstractRenderer
(我将使用 C++ 语法,但问题仍然很普遍)。
假设这个渲染器有一些派生的实现,比如说DirectxRenderer
and OpenglRenderer
。
现在,假设这些渲染器中只有一个(让我们坚持基于 DirectX)有一个名为“IDirect3D9Device* m_device;
显然此时一切都很好”的成员 -m_device
在内部使用DirectxRenderer
并且不应该在抽象AbstractRenderer
超类中公开。
我还添加了一些抽象的渲染接口,例如IRenderable
. 这仅意味着一种纯虚方法virtual void Render(AbstractRenderer* renderer) const = 0;
这就是一些问题开始的地方。假设我正在为某个场景建模,那么这个场景中可能会有一些几何对象。
我创建抽象超类AbstractGeometricalObject
和派生的基于 DirectX 的实现DirectxGeometricalObject
。第二个负责存储指向 DirectX 特定的顶点和索引缓冲区的指针。
现在 - 问题。
AbstractGeometricalObject
显然应该派生IRenderable
接口,因为它在逻辑上是可渲染的。
如果我派生出我DirectxGeometricalObject
的 from AbstractGeometricalObject
,第一个应该有virtual void Render(AbstractRenderer* renderer) const { ... }
方法,那Abstract...
东西会带来一些麻烦。
请参阅代码以获得更好的解释:
现在我的课程看起来如下:
我知道我可能担心太多了,但是在如此简单的情况下,这种沮丧意味着如果我的应用程序增长,我可能会被迫做出很多沮丧。
当然,我想避免这种情况,所以请你在设计方面给我一些更好的建议/指出我的错误。
谢谢