问题标签 [dynamic-cast]

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 回答
5486 浏览

c++ - dynamic_cast 通常是如何实现的?

类型检查仅仅是整数比较吗?GetTypeId或者有一个虚函数来区分哪个会使其成为整数比较是否有意义?

(只是不希望事情成为类名的字符串比较)

编辑:我的意思是,如果我经常期待错误的类型,那么使用以下内容是否有意义:

并使用GetTokenId成员而不是依赖dynamic_cast.

0 投票
8 回答
722 浏览

c++ - 测试 C++ 类的功能

我有一组类,它们描述了一组可以容纳东西并对它们做事的逻辑框。我有

我想知道对于这些类的客户来说,处理这些可选功能的“最好”或者可能只是“最喜欢”的习语是什么

一种)

b)

C)

d)现在不同的类结构

e) 相同,除了

f) 显式测试功能

我相信还有其他人。

编辑:

只是为了使用例更清晰

我通过交互式 ui 将这些东西暴露给最终用户。他们可以输入“make box do X”。我需要知道box是否可以做x。或者我需要禁用 'make current box do X' 命令

EDIT2:感谢所有回答者

正如诺亚·罗伯茨(Noah Roberts)指出的那样(a)不起作用(解释了我的一些问题!)。我最终做了(b)和一个轻微的变体

并让 UI 管道很好地处理异常(我并没有真正抛出裸字符串)。

我也打算探索访客

0 投票
3 回答
225 浏览

c++ - 继承和指向指针的指针:为什么它不起作用以及如何解决它?

当我使用指向继承类的指针调用基类函数时,为什么会出现编译错误?

例子:

我该如何解决这个问题?

0 投票
1 回答
438 浏览

c++ - 我可以教 dynamic_cast<>() 新技巧吗?

在 C++ 中有没有办法构造你的类,这样给定一个指向你的类的指针,你可以指示 dynamic_cast<>() 如何转换到另一个你正在为其包装实现的类?运营商演员会成功吗?想象一下,我有一个抽象接口基类,并从中派生了一个具体A 以及具体B,但是具体B 将接口包装到一个具体A 类型的对象。如果我收到从具体 A 转换为具体 A 的请求,我希望它能够工作:

0 投票
1 回答
2271 浏览

c++ - 动态转换和多重继承

dynamic_cast我应用于指向多重继承对象实例的指针时,运算符返回零 (0)。我不明白为什么。

层次结构:

我希望将Record_ID_As_Field其视为一个Field_Interface,但也适合Record_ID_Interface需要的地方。

为什么dynamic_cast在上面的(1)中返回 0,我该如何解决这个问题?

我在 Windows XP 上使用 Visual Studion 2008。

注意:为简单起见,我在此示例中使用基本指针。实际代码使用boost::shared_ptr.

0 投票
3 回答
6706 浏览

c++ - C++ 向下转型(使用 dynamic_cast)返回 NULL?

环境:Linux C++ / Qt 4x

我不明白为什么下面的downcast返回NULL?我在下面粘贴了基类和派生类。

提前感谢任何提示或建议。

-埃德

提前感谢您的任何提示或建议,

-埃德

0 投票
2 回答
20670 浏览

c++ - 使用 dynamic_cast 强制转换 const 类

我想投这个:

我应该怎么办?我试图提出:const Der* der = dynamic_cast<Der*>(base);维护 const 但这不起作用。

0 投票
5 回答
1500 浏览

c++ - 是否可以从一个基类动态转换到另一个基类?

例如我有这样的代码

然而,由于无法将 ptr 转换为 b1,wonderFULL 从未执行过。是否有可能执行这样的转换?

0 投票
6 回答
8559 浏览

c++ - 在 C++ 中,检查一个基类的两个实例是否实际上属于同一个子类

下面的代码解释了这个问题。填写 same_sub_class 以检测两个指向虚拟基类 A 的指针是否实际上是同一个具体类。

编辑:

当我查看我的应用程序时,我需要一些与上面略有不同的东西。我需要能够按它们的 type_id 对实例进行分组。

供参考。我有一个迷你符号代数系统,所以要进行操作,有时了解类类型对于排序和重新排列表达式很重要。

因此,给定一个指向实例的指针向量,如何按它们的 type_id 对它们进行分组。我要么需要能够散列 type_id 要么为每个类生成一个唯一的整数。

0 投票
6 回答
12221 浏览

java - java:结合instanceof和cast?

(请不要建议我应该抽象X更多并添加另一种方法。)

在 C++ 中,当我有一个类型的变量x并且如果它也是类型(作为 的子类)X*我想做一些特定的事情,我正在写这个:Y*YX

同样的事情在 Java 中似乎是不可能的(或者是吗?)。

我已经阅读了这段 Java 代码:

有时,当您没有变量x但它是一个更复杂的表达式时,正是因为这个问题,您需要一个 Java 中的虚拟变量:

(常见的something()iterator.next()。而且你看到你也不能真正调用它两次。你真的需要虚拟变量。)

你在这里根本不需要x——你只是拥有它,因为你不能instanceof立即对演员表进行检查。再次将其与相当常见的 C++ 代码进行比较:

正因为如此,我引入了一个castOrNull可以避免虚拟变量的函数x。我现在可以这样写:

实施castOrNull

现在,有人告诉我,以这种方式使用此castOrNull功能是对. 这是为什么?(或者更笼统地说:你会同意并认为这是邪恶的吗?如果是,为什么会这样?或者你认为这是一个有效的(可能是罕见的)用例吗?)


如前所述,我不想讨论这种沮丧的使用是否是一个好主意。但是让我简要说明一下为什么我有时会使用它:

  1. 有时我会遇到这样的情况,即我必须在为非常特定的事物添加另一种新方法(在一种特定情况下仅适用于单个子类)或使用此类instanceof检查之间做出选择。基本上,我可以选择添加功能doSomethingVeryVerySpecificIfIAmY()或进行instanceof检查。而在这种情况下,我觉得后者更干净。

  2. 有时我有一些接口/基类的集合,对于所有类型的条目Y,我想做一些事情,然后将它们从集合中删除。(例如,我有一个树结构的情况,我想删除所有空叶子的孩子。)