14得票4回答
从基类到派生类的 `dynamic_cast`

是的,我知道使用 dynamic_cast 进行向下转型如果 Base 不具备多态性将无法编译,但我的问题并不是关于这个。class Base { public: virtual void bar() { cout <&lt...

27得票3回答
使用boost::dynamic_pointer_cast时,C++报错:"...不是一个多态类型"

为什么我在运行以下代码时会收到以下错误提示? 1>C:\Libs\boost_1_44\boost/smart_ptr/shared_ptr.hpp(259): error C2683: 'dynamic_cast' : 'my_namespace::A' is not a polym...

13得票1回答
智能指针和dynamic_cast

如果这个问题已经有答案了,我提前道歉,因为我找不到答案。 注意:这是一项作业任务,如果你觉得不舒服回答,我完全理解。 我有以下内容: ptr.h: template<typename T> class Ptr { T* address; size_t* co...

8得票6回答
我应该修改设计以避免使用动态转换吗?

我已经阅读了关于C++中动态类型转换的几个线程,所有这些都有人声称它表明了糟糕的设计。在其他语言中,当检查对象类型时,我从未认真考虑过它。我不会将其用作多态的替代方法,只有在强耦合看起来非常可接受的情况下才使用它。其中一个我经常遇到的情况是:有一个对象列表(我在C++中使用std::vecto...

27得票2回答
dynamic_cast<void*> 何时有用?

5.2.7/7的大意是: 如果T为“指向cv void的指针”,则结果是指向x所指向的最派生类的指针。 这个语法有什么好的应用场景?什么情况下应该使用dynamic_cast&lt;void*&gt;呢?

12得票6回答
在C++中检查两个基类的实例是否实际上属于同一个子类

下面的代码解释了这个问题。填写`same_sub_class`函数以检测指向虚基类A的两个指针是否实际上是同一个具体类。struct A { ... }: struct B : public A { ... }: struct C : public A { ... ...

8得票1回答
dynamic_cast与static_cast到void*的区别

在下面程序的最后两行中,static_cast&lt;void*&gt;和dynamic_cast&lt;void *&gt;的行为不同。据我所知,dynamic_cast&lt;void*&gt;的结果始终解析为完整对象的地址。因此它以某种方式使用了RTTI。请问有人能解释编译器如何使用RT...

7得票5回答
在构造函数中使用dynamic_cast来转换"this"的类型

这个问题与为什么我无法在多重继承中进行“侧向”dynamic_cast?非常相似,只是转换确实有效,但不能在构造函数内部执行。 标题: class A { public: virtual ~A() {} void ...

8得票2回答
C++中dynamic_cast中的side-cast或cross-cast是什么?

在C++中的dynamic_cast中,什么是side-cast/cross-cast?能否用例子解释一下? #include &lt;iostream&gt; using namespace std; class A { virtual void fn(){} }; class...

16得票2回答
dynamic_cast 和 rvalue 引用

class A{ public: virtual ~A() {}; }; class B : public A{ }; int main(){ A&amp;&amp; p = B(); dynamic_cast&lt;B&amp;&amp;&gt;(std::m...