问题标签 [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++ - C++ 中的动态转换有多昂贵?
对于与各种后端(sdl、gl、d3d 等)一起使用的 GUI API,我想将通用类型图像动态转换为可能发生的任何情况。
所以底线是,我每秒会进行大约 20 * 60fps 的动态投射。
动态演员表有多贵?我会注意到它对性能有明显的负面影响吗?我有哪些替代方案仍能保持可接受的性能水平?
c++ - dynamic_cast 的正确用例是什么?
我被多次告知(并且在实践中看到自己)使用 dynamic_cast 通常意味着糟糕的设计,因为它可以而且应该用虚函数代替。
例如,考虑以下代码:
可以很容易地看出,我们只需添加一个虚函数doStuff()
并Base
在Derived
.
在那种情况下,我的问题是,为什么我们在语言中有 dynamic_cast 呢?是否有使用 dynamic_cast 合理的示例?
c++ - C++:使用 boost::dynamic_pointer_cast 时“...不是多态类型”
为什么我会收到以下代码的以下错误?
C++ 代码或多或少如下:
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*
?
c++ - 构造函数中“this”的dynamic_cast
这个问题和这个问题非常相似Why can't I dynamic_cast "sideways" during multiple继承?,除了演员表确实有效 - 只是不在构造函数内部。
标题:
资源:
主要的:
结果:
所以,dynamic_cast 确实适用于多重继承(这并不奇怪!),但为什么在运行时为 B::B() 中的“this”指针调用时不呢?我认为对象在构造函数的主体内完全形成,即所有内存都分配给组件对象,它们还没有被初始化。我很欣赏这取决于超类构造函数的顺序,但在这个例子中,A 在 B 之前被调用。
我显然不明白幕后到底发生了什么,有人可以赐教吗?
谢谢,凸轮班伯。
c++ - 两个 dynamic_cast 问题
您会在频繁运行的方法中使用动态转换吗?它有很大的开销吗?
dynamic_cast 返回的指针到底是什么。指向同一地址的指针?指向不同实例的指针?我缺乏这种理解。更具体地说——我希望对父类型的指针进行赋值,前提是在运行时它是指向子类型的指针。解决方案?
谢谢你。
casting - 检查可以是非多态类型的模板类的强制转换(作为 dynamic_cast)
我的类中有一个模板成员,我想知道该成员的类是否继承自特定类。
我知道如果类不是多态的,dynamic_cast 不会编译,my_member
但我无法控制模板类它可以是多态类型或不是多态类型(我正在编写一个库,我的用户可以使用他们想要的任何类)。
没有人知道以编译 T 是否为多态的方式来实现这一点吗?感谢您的任何想法
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.
c++ - C++ 中 dynamic_cast 的真实示例
当需要dynamic_cast并且根本无法解决时,谁能给我一个真实的案例示例?我能想到的示例通常可以通过双重调度来解决。
如果约束太强,那么 dynamic_cast 通常是要走的路的例子也很好。
我希望看到真实的例子,而不是“它通常用于在类型树上下类型之间进行转换”。