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

java - 如何进行安全的向下转换并防止 ClassCastException

我有以下情况:

我有一个可以返回类ABC的方法,并且我想安全地转换为 C ,但前提是类类型为C。这是因为我需要调用 Foo() 但我不想要 ClassCastException。

0 投票
7 回答
32839 浏览

c++ - C++ 无法通过虚拟基 A 从基 A 转换为派生类型 B

我有三个班级:

尝试从 A* 到 B* 的静态转换我收到以下错误:

0 投票
6 回答
231 浏览

c++ - 如果不在纯虚拟基类中创建显式函数,就不能完成复制构造吗?

我的目标是做一个类的深拷贝,但是一个虚拟类却造成了麻烦。

编译错误信息:

我计划拥有更多从 Vir 继承的 Handler 类(如 Handler1、Handler2 等),并将拥有自己独特的成员(如 float a; 或 double b; 等)。因此,将所有 Handler 类的所有 getter 和 setter 函数保留在 Vir 类中对我来说是没有意义的。我想在 Handler 类中保留我的 getter 和 setter 方法,因为这些成员对于 Handler 类是唯一的。编译器不允许我这样做。帮助?

0 投票
3 回答
3686 浏览

c++ - 如何从 python SWIG 包装器向下转换 c++ 对象?

问题:我使用 SWIG 在 python 中包装了一些 c++ 代码。在 python 方面,我想采用一个包装的 c++ 指针并将其向下转换为指向子类的指针。我在 SWIG .i 文件中添加了一个新的 c++ 函数来执行此向下转换,但是当我从 python 调用它时,我得到一个 TypeError。

以下是详细信息:

我有两个 C++ 类,Base 和 Derived。Derived 是 Base 的子类。我有第三个类,Container,它包含一个 Derived,并提供了一个访问器。访问器将 Derived 作为 const Base& 返回,如下所示:

我已经使用 SWIG 将这些类包装在 python 中。在我的 python 代码中,我想将 Base 引用向下转换为 Derived。为此,我在 swig .i 文件中写入了一个使用 c++ 进行向下转换的辅助函数:

在我的 python 代码中,我称之为向下转换函数:

当我这样做时,我收到以下错误:

为什么会发生这种情况?

作为参考,这里是 SWIG 生成的 .cxx 文件的相关位;即原始函数及其python接口化的doppelganger:

任何帮助将不胜感激。

——马特

0 投票
2 回答
971 浏览

c# - 在 C# 3.5 中向下转换泛型类型

为什么我只能向上转换一个泛型而不向下转换它?如果我的约束说并且 U 是从有效的 BaseClass 派生
的,编译器怎么不清楚?where T : BaseClass(U)objectOfTypeT

0 投票
3 回答
2430 浏览

c++ - 当基类从非多态变为多态时,派生类上的 static_cast

我正在审查 C++ casts 运算符,我有以下疑问:

对于多态类

  • 二应该使用polymorphic_cast
  • 我永远不应该使用,static_cast因为向下转换可能会导致未定义的行为。无论如何,代码都会编译这种情况。

现在假设我有以下情况

由于不涉及多态性,我不会使用polymorphic_cast,代码甚至不会编译。

如果在某个时候,有人virtual在继承树中引入了一些功能,而我现在已经意识到了,那么我就处于危险之中:我该如何实现呢?

我应该polymorphic_cast避免任何风险,但代码仍将在没有任何通知的情况下编译。

你如何意识到这种变化或防止这些情况发生?

谢谢AFG

0 投票
1 回答
1161 浏览

c++ - 为什么我不能向下转换指向模板参数中成员的指针?

如果我创建一个指向基成员的指针,我通常可以将其转换为指向派生成员的指针,但在下面的 Buzz 之类的模板中使用时则不行,因为第一个模板参数会影响第二个模板参数。我是在与编译器错误作斗争,还是标准真的要求这不起作用?

0 投票
4 回答
29955 浏览

java - 如何向下转换 Java 对象?

我试图理解 Java 的多态性,并且我有一个关于向下转换对象的问题。假设对于这个例子,我有两个继承自超类 Animal 的子类 Dog 和 Cat

据我了解,向下转换对象的唯一方法是该对象是否已经是好的类型,如下所示:

这行得通吗?

但是如果我想在不知道它会是什么的情况下创建一个普通的动物,然后在我知道的时候施放它,我该怎么做呢?

这会在运行时抛出 ClassCastException 对吗?

我发现这样做的唯一方法是创建一个新的 Dog 构造函数,该构造函数从常规动物创建狗:

所以我的问题是,我该怎么做?

  • 我这样做是最好的方式吗?
  • 难道我根本不应该这样做,如果我必须这样做意味着我的程序没有很好地构思?
  • 我错过了更好的方法吗?

非常感谢!nbarraille

0 投票
5 回答
33543 浏览

php - 将当前对象 ($this) 转换为后代类

我有一个类,可能需要将对象更改为更进一步的后代类。这可能吗?我知道一种选择是返回它的副本,但改用子类,但实际上修改当前对象会很好......所以:

0 投票
1 回答
200 浏览

java - 访问android中覆盖方法的参数的子方法?

这一定是一个菜鸟问题,但我找不到合适的等待来实现以下目标:

在 android 中,我创建了一个子类 MyView 扩展了一个 View 类。在 B 中,我定义了 View 类中不存在的方法 mMethod。

现在,我想在 MyView 上设置一个 OnClickListener 接口。这样做,我必须在定义一个新的 OnClickListener 时重写一个 onClick 方法。此外,我想访问 onClick 中的 mMethod 方法,但被覆盖的方法需要一个 View 类实例,而不是 MyView 的实例。那我该怎么办?

更准确地说:

并且在主类(Activity)中

使用myView.mMethod()是唯一的解决方案吗?是否有可能沮丧v(MyView)v?如果是这样,该怎么做?我应该定义一个子接口吗?

谢谢!