问题标签 [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.
c++ - dynamic_cast 通常是如何实现的?
类型检查仅仅是整数比较吗?GetTypeId
或者有一个虚函数来区分哪个会使其成为整数比较是否有意义?
(只是不希望事情成为类名的字符串比较)
编辑:我的意思是,如果我经常期待错误的类型,那么使用以下内容是否有意义:
并使用GetTokenId
成员而不是依赖dynamic_cast
.
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 管道很好地处理异常(我并没有真正抛出裸字符串)。
我也打算探索访客
c++ - 继承和指向指针的指针:为什么它不起作用以及如何解决它?
当我使用指向继承类的指针调用基类函数时,为什么会出现编译错误?
例子:
我该如何解决这个问题?
c++ - 我可以教 dynamic_cast<>() 新技巧吗?
在 C++ 中有没有办法构造你的类,这样给定一个指向你的类的指针,你可以指示 dynamic_cast<>() 如何转换到另一个你正在为其包装实现的类?运营商演员会成功吗?想象一下,我有一个抽象接口基类,并从中派生了一个具体A 以及具体B,但是具体B 将接口包装到一个具体A 类型的对象。如果我收到从具体 A 转换为具体 A 的请求,我希望它能够工作:
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
.
c++ - C++ 向下转型(使用 dynamic_cast)返回 NULL?
环境:Linux C++ / Qt 4x
我不明白为什么下面的downcast返回NULL?我在下面粘贴了基类和派生类。
提前感谢任何提示或建议。
-埃德
提前感谢您的任何提示或建议,
-埃德
c++ - 使用 dynamic_cast 强制转换 const 类
我想投这个:
我应该怎么办?我试图提出:const Der* der = dynamic_cast<Der*>(base);
维护 const 但这不起作用。
c++ - 是否可以从一个基类动态转换到另一个基类?
例如我有这样的代码
然而,由于无法将 ptr 转换为 b1,wonderFULL 从未执行过。是否有可能执行这样的转换?
c++ - 在 C++ 中,检查一个基类的两个实例是否实际上属于同一个子类
下面的代码解释了这个问题。填写 same_sub_class 以检测两个指向虚拟基类 A 的指针是否实际上是同一个具体类。
编辑:
当我查看我的应用程序时,我需要一些与上面略有不同的东西。我需要能够按它们的 type_id 对实例进行分组。
供参考。我有一个迷你符号代数系统,所以要进行操作,有时了解类类型对于排序和重新排列表达式很重要。
因此,给定一个指向实例的指针向量,如何按它们的 type_id 对它们进行分组。我要么需要能够散列 type_id 要么为每个类生成一个唯一的整数。
java - java:结合instanceof和cast?
(请不要建议我应该抽象X
更多并添加另一种方法。)
在 C++ 中,当我有一个类型的变量x
并且如果它也是类型(作为 的子类)X*
我想做一些特定的事情,我正在写这个:Y*
Y
X
同样的事情在 Java 中似乎是不可能的(或者是吗?)。
我已经阅读了这段 Java 代码:
有时,当您没有变量x
但它是一个更复杂的表达式时,正是因为这个问题,您需要一个 Java 中的虚拟变量:
(常见的something()
是iterator.next()
。而且你看到你也不能真正调用它两次。你真的需要虚拟变量。)
你在这里根本不需要x
——你只是拥有它,因为你不能instanceof
立即对演员表进行检查。再次将其与相当常见的 C++ 代码进行比较:
正因为如此,我引入了一个castOrNull
可以避免虚拟变量的函数x
。我现在可以这样写:
实施castOrNull
:
现在,有人告诉我,以这种方式使用此castOrNull
功能是对. 这是为什么?(或者更笼统地说:你会同意并认为这是邪恶的吗?如果是,为什么会这样?或者你认为这是一个有效的(可能是罕见的)用例吗?)
如前所述,我不想讨论这种沮丧的使用是否是一个好主意。但是让我简要说明一下为什么我有时会使用它:
有时我会遇到这样的情况,即我必须在为非常特定的事物添加另一种新方法(在一种特定情况下仅适用于单个子类)或使用此类
instanceof
检查之间做出选择。基本上,我可以选择添加功能doSomethingVeryVerySpecificIfIAmY()
或进行instanceof
检查。而在这种情况下,我觉得后者更干净。有时我有一些接口/基类的集合,对于所有类型的条目
Y
,我想做一些事情,然后将它们从集合中删除。(例如,我有一个树结构的情况,我想删除所有空叶子的孩子。)