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

c++ - C++ 中的动态转换有多昂贵?

对于与各种后端(sdl、gl、d3d 等)一起使用的 GUI API,我想将通用类型图像动态转换为可能发生的任何情况。

所以底线是,我每秒会进行大约 20 * 60fps 的动态投射。

动态演员表有多贵?我会注意到它对性能有明显的负面影响吗?我有哪些替代方案仍能保持可接受的性能水平?

0 投票
5 回答
6673 浏览

c++ - dynamic_cast 的正确用例是什么?

我被多次告知(并且在实践中看到自己)使用 dynamic_cast 通常意味着糟糕的设计,因为它可以而且应该用虚函数代替。

例如,考虑以下代码:

可以很容易地看出,我们只需添加一个虚函数doStuff()BaseDerived.

在那种情况下,我的问题是,为什么我们在语言中有 dynamic_cast 呢?是否有使用 dynamic_cast 合理的示例?

0 投票
3 回答
24007 浏览

c++ - C++:使用 boost::dynamic_pointer_cast 时“...不是多态类型”

为什么我会收到以下代码的以下错误?

C++ 代码或多或少如下:

0 投票
2 回答
1756 浏览

c++ - 共享库中模板类和 dynamic_cast 的显式实例化

我今天偶然发现了一个我似乎无法解决的问题。我正在编译一个共享库,其中包括一个模板类(Derived<T>,其基础是Base)和该类的一些显式实例化。我希望图书馆用户从这个模板类扩展。当我尝试dynamic_cast将用户的实例从Base*to 转移到Derived<T>*.

我已将问题缩小到这个 MWE:

共享库包含以下文件:

基数.h

派生的.h

派生的.cpp

助手.h

助手.cpp

使用该库的简单代码可能是:

测试.cpp

问题是当我创建一个共享库并链接test.cpp它时,dynamic_cast失败了。这是一个示例输出:

但是,如果我一起编译整个库和示例,则转换成功:


我的问题是:为什么会dynamic_cast失败?

并且,在我想像示例一样维护一个类结构,并继续使用共享库的前提下:我怎样才能成功地Derived<some type>*从 a中获取强制转换Base*

0 投票
5 回答
4498 浏览

c++ - 构造函数中“this”的dynamic_cast

这个问题和这个问题非常相似Why can't I dynamic_cast "sideways" during multiple继承?,除了演员表确实有效 - 只是不在构造函数内部。

标题:

资源:

主要的:

结果:

所以,dynamic_cast 确实适用于多重继承(这并不奇怪!),但为什么在运行时为 B::B() 中的“this”指针调用时不呢?我认为对象在构造函数的主体内完全形成,即所有内存都分配给组件对象,它们还没有被初始化。我很欣赏这取决于超类构造函数的顺序,但在这个例子中,A 在 B 之前被调用。

我显然不明白幕后到底发生了什么,有人可以赐教吗?

谢谢,凸轮班伯。

0 投票
5 回答
1020 浏览

c++ - 两个 dynamic_cast 问题

  1. 您会在频繁运行的方法中使用动态转换吗?它有很大的开销吗?

  2. dynamic_cast 返回的指针到底是什么。指向同一地址的指针?指向不同实例的指针?我缺乏这种理解。更具体地说——我希望对父类型的指针进行赋值,前提是在运行时它是指向子类型的指针。解决方案?

谢谢你。

0 投票
3 回答
911 浏览

c++ - dynamic_cast 在重载的运算符删除中工作吗?

我遇到了这个:

现在,如果我们这样做,

令人惊讶的是,Base::delete 内部的条件不满足 我做错了什么吗?void*还是从丢失的信息中铸造Derived*

0 投票
2 回答
242 浏览

casting - 检查可以是非多态类型的模板类的强制转换(作为 dynamic_cast)

我的类中有一个模板成员,我想知道该成员的类是否继承自特定类。

我知道如果类不是多态的,dynamic_cast 不会编译,my_member但我无法控制模板类它可以是多态类型或不是多态类型(我正在编写一个库,我的用户可以使用他们想要的任何类)。
没有人知道以编译 T 是否为多态的方式来实现这一点吗?感谢您的任何想法

0 投票
4 回答
1937 浏览

c++ - dynamic_cast to the same type does not check type of object

I am trying to determine whether an object pointed by a T* pointer is truly a T object, or some other, unrelated type. I tried dynamic_cast, however it is less than useless, it returns the pointer itself instead of null even when it is obvious it does not point to a valid T object:

Is there any workaround for this, or some other solution? I've tried casting to void* and char* before the dynamic_cast to no avail, typeid is not enough either since I want to accept subclasses as well.

Some context: I'm writing a custom Array class implementing shallow conversion between different kinds of Arrays, like Array<Object*> and Array<String*>, and I would like to guarantee a minimal type safety by doing a dynamic type check at every element access, for example:

Casting to Object*, then doing the type check on the Object* works in a lot of cases, but it fails in the case of Array<Object*>, though I am not sure whether it is possible to insert something non-Object into an Array<Object*> without the use of reinterpret_cast.

0 投票
5 回答
4247 浏览

c++ - C++ 中 dynamic_cast 的真实示例

当需要dynamic_cast并且根本无法解决时,谁能给我一个真实的案例示例?我能想到的示例通常可以通过双重调度来解决。

如果约束太强,那么 dynamic_cast 通常是要走的路的例子也很好。

我希望看到真实的例子,而不是“它通常用于在类型树上下类型之间进行转换”。