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

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

49得票3回答
动态转型(dynamic_cast)是如何实现的?

考虑这个简单的层次结构:class Base { public: virtual ~Base() { } }; class Derived : public Base { }; 试图将 Base* p 向下转换为 Derived* 可以使用 dynamic_cast<Derived*&g...

12得票3回答
在C#中是否有一种动态隐式类型转换的方法?

给定一个具有隐式转换运算符的类:public class MyDateTime { public static implicit operator MyDateTime(System.Int64 encoded) { return new MyDateTime(...

7得票4回答
动态类型转换(dynamic_cast)通常是如何实现的?

类型检查仅限于整数比较吗?或者是否有一个GetTypeId虚函数来区分类型,从而使其成为整数比较? (只是不希望根据类名进行字符串比较) 编辑:我的意思是,如果我经常期望错误的类型,那么使用类似以下内容是否有意义: struct Token { enum { AN...

47得票4回答
如何使用unique_ptr执行dynamic_cast?

我有一个类层次结构如下:class BaseSession : public boost::enable_shared_from_this<BaseSession> class DerivedSessionA : public BaseSession class DerivedSe...

52得票6回答
dynamic_cast的性能表现?

在阅读问题之前: 这个问题不涉及使用dynamic_cast的有用性,只是关于它的性能。 我最近开发了一个设计,在其中大量使用了dynamic_cast。 在与同事讨论时,几乎每个人都说不应该使用dynamic_cast,因为它会影响性能(这些同事有不同的背景,在某些情况下甚至不认识对方。我...

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

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

13得票5回答
C++中dynamic_cast的实际应用举例

有没有人能给我一个现实世界中需要使用dynamic_cast并且不能完全通过双重分派来解决的案例?我能想到的例子通常都可以通过双重分派来解决。 如果限制太强了,一个通常需要使用dynamic_cast的示例也会很好。 我想看到真正的例子,而不是“它通常用于类型树上下转换的强制类型转换”。

7得票3回答
C++:即使被转换的对象不是NULL,dynamic_cast也会导致SEGFAULT。这是怎么发生的?

假设我有一个 A 类和一个从 A 派生的 B 类。现在,我想使用 dynamic_cast(见下文)将一个 const A*(称为“a”)转换为 B*。如果“a”确实是 B*,则我的结果对象指针应该很好。如果“a”不是 B*,那么我将得到 NULL。 const A* a = new B()...

25得票3回答
如何使用dynamic_cast运算符识别失败的类型转换?

Effective C++一书的作者Scott Meyer指出,dynamic_cast用于在继承层次结构中执行安全的向下或跨越转换。也就是说,您可以使用dynamic_cast将指向基类对象的指针或引用转换为指向派生类或兄弟基类对象的指针或引用,以便您可以确定转换是否成功。 失败的转换通过...