问题标签 [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.

0 投票
1 回答
1339 浏览

php - 在php5中向下转换

我已经意识到 php5 中没有向下转换。有没有共同的模式来实现它?

0 投票
2 回答
529 浏览

php - 这个 php 向下转换的解决方法有多贵

这个问题与php5中的向下转换有关

这个 php 向下转换的解决方法有多贵?

这个 php 向下转换的解决方法是否太贵了?

我已经回应了 microtimes,它似乎需要 0.001。我想知道这是否可能是大型 foreach 中的问题。

http://php.net/manual/en/language.types.type-juggling.php评论中提出的解决方案类似。

0 投票
1 回答
2213 浏览

.net - 如何在 vb.net 中进行动态向下转换?

我有几个类,它们都派生自 SuperClass。

创建类时,它们都被放入一个 List(Of SuperClass) 中。当我浏览列表时,我想将 SuperClass 对象向下转换为它的 baseObject,并将其放入正确的列表中。(我为 SuperClass 的每个子类型创建了一个列表)。

可以确定:

但这是很多工作,当有几个班级时。

通过使用

我得到了子类的类型。

我的问题是:是否可以使用它来动态转换 SuperClass 对象?在伪代码中:

编辑:我希望我可以使用一个变量而不是为每个子类创建一个案例,并在一个循环中完成所有操作。

0 投票
3 回答
2855 浏览

c# - 如何使用 SWIG 生成的界面在 C# 中正确向下转换?

我有一个非常庞大且成熟的 C++ 代码库,我正在尝试使用 SWIG 为其生成 C# 接口。我无法更改实际的 C++ 代码本身,但我们可以使用 SWIG 提供的任何东西来扩展/更新它。我面临一个问题,即如下编写的 C++ 函数在 C# 中引起问题。

调用者可能会执行以下操作:

本质上,遍历一个元素容器,根据它们的真实类型,做一些不同的事情。遗憾的是,SWIG 为“下一个”函数生成的 C# 层执行以下操作:

因此,C# 中的调用代码无法确定返回的对象是否实际上是派生类,它实际上似乎始终是基类(这确实有意义)。我遇到了几种解决方案:

  1. 使用 %extend SWIG 关键字在对象上添加方法并最终调用 dynamic_cast。在我看来,这种方法的缺点是需要您了解继承层次结构。就我而言,它相当大,我认为这是一个维护问题。
  2. 使用 %factory 关键字来提供方法和派生类型,并让 SWIG 自动生成 dynamic_cast 代码。这似乎是一个比第一个更好的解决方案,但是在更深入的研究中,它仍然需要您寻找它可能返回的所有方法和所有可能的派生类型。再次,一个巨大的维护问题。我希望我有一个文档链接,但我找不到。我通过查看 SWIG 附带的示例代码发现了这个功能。
  3. 创建 C# 方法以创建派生对象的实例并将 cPtr 传输到新实例。虽然我认为这很笨拙,但它确实有效。请参阅下面的示例。

这些真的是选择吗?如果我不愿意挖掘所有现有的函数和类派生,那么我只剩下#3了吗?任何帮助,将不胜感激。

0 投票
3 回答
1296 浏览

c++ - 是否有任何 C++ 工具可以检测误用 static_cast、dynamic_cast 和 reinterpret_cast?

以下问题的答案描述了C++中static_castdynamic_cast和的推荐用法:reinterpret_cast

什么时候应该使用 static_cast、dynamic_cast、const_cast 和 reinterpret_cast?

你知道有什么工具可以用来检测这些演员阵容的滥用吗?像 PC-Lint 或 Coverity 静态分析这样的静态分析工具会这样做吗?

提示这个问题的特殊情况是不恰当地使用static_cast来向下转换指针,编译器不会警告。我想使用一种工具来检测这种情况,而不是假设开发人员永远不会犯这个错误。

0 投票
5 回答
465 浏览

c++ - 这不是垂头丧气吗?

如果我做

我不是“垂头丧气”吗?

或者

这个术语是否仅用于类和对象?


我很困惑,因为在这种情况下,我们是从一个更大的“向下转换”double到一个较小的int,但是在类的情况下,我们从一个较小的“向下转换”base class到一个更大的derived class

从某种意义上说,这两个约定不是相反的吗?

0 投票
4 回答
823 浏览

java - Java 向下转型和 is-A has-A 关系

你好,

我有一个向下铸造的问题,我在这方面有点生疏。我有 2 节课是这样的:

我有一个这样的方法,在一个实用程序助手类中:

其中 C 是从数据库中检索然后转换的对象。

问题是我想通过传入'C'并返回B来调用上述方法。所以我尝试了这个:

因此,即使上述方法返回 AI 尝试将其向下转换为 B,但我得到了运行时 ClassCastException。真的没有办法解决这个问题吗?我是否必须编写一个单独的 converts() 方法来返回 B 类类型?

如果我像这样声明我的 B 类:

然后我可以像这样调用我现有的方法:

这样我可以重用现有的方法,即使扩展关系更有意义。我应该怎么办?非常感谢任何帮助。谢谢。

0 投票
4 回答
271 浏览

c# - 使用向下转换浅拷贝列表

我的班级遗产如下

CEntity---->CNode--->CElement

我有一个

节点类包含跨不同项目的通用项目元素类具有特定于项目的项目。

我必须将元素列表浅复制到节点列表中(基本上将元素向下转换为节点)

0 投票
2 回答
183 浏览

downcast - 试图了解编译器是如何完成转换/转换的,例如,当从 float 转换为 int 时

当 float 转换为 int 时,编译器如何实现此转换。编译器是否屏蔽了浮点变量的某些内存,即编译器将哪一部分内存传递给 int 变量。

我想这个问题的答案在于 int 和 float 如何在内存中维护。

但它不是依赖于机器而不是依赖于编译器。编译器如何决定在转换为较低类型时复制哪一部分内存(这是一个静态转换,对)。

我想我对一些错误的信息感到困惑。

(我读了一些关于 tag=downcasting 的问题,关于它是强制转换还是转换的争论正在进行中,我对它的名称不太感兴趣,因为两者都是由编译器执行的,但是关于它是如何被执行的执行)。

... 谢谢

0 投票
6 回答
440 浏览

c++ - C++继承问题

我在应用程序架构中有以下问题,并愿意解决它(对不起,很多文字)。

我正在构建一个游戏引擎原型,并且我有基本的抽象类AbstractRenderer (我将使用 C++ 语法,但问题仍然很普遍)。

假设这个渲染器有一些派生的实现,比如说DirectxRendererand 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...东西会带来一些麻烦。

请参阅代码以获得更好的解释:

现在我的课程看起来如下:

我知道我可能担心太多了,但是在如此简单的情况下,这种沮丧意味着如果我的应用程序增长,我可能会被迫做出很多沮丧。

当然,我想避免这种情况,所以请你在设计方面给我一些更好的建议/指出我的错误。

谢谢