相关疑难解决方法(0)

C++中的dynamic_cast和static_cast

dynamic_cast对C++中的关键字很困惑.

struct A {
    virtual void f() { }
};
struct B : public A { };
struct C { };

void f () {
    A a;
    B b;

    A* ap = &b;
    B* b1 = dynamic_cast<B*> (&a);  // NULL, because 'a' is not a 'B'
    B* b2 = dynamic_cast<B*> (ap);  // 'b'
    C* c = dynamic_cast<C*> (ap);   // NULL.

    A& ar = dynamic_cast<A&> (*ap); // Ok.
    B& br = dynamic_cast<B&> (*ap); // Ok.
    C& cr = dynamic_cast<C&> …
Run Code Online (Sandbox Code Playgroud)

c++ dynamic-cast

149
推荐指数
4
解决办法
16万
查看次数

dynamic_cast是如何实现的

考虑这个简单的层次

class Base { public: virtual ~Base() { } };
class Derived : public Base { };
Run Code Online (Sandbox Code Playgroud)

试图向下转换Base* pDerived*可能使用dynamic_cast<Derived*>(p).我曾经dynamic_cast通过将vtable指针pDerived对象中的指针进行比较来思考作品.

但是,如果我们从中衍生出另一个类Derived呢?我们现在有:

class Derived2 : public Derived { };
Run Code Online (Sandbox Code Playgroud)

在这种情况下:

Base* base = new Derived2;
Derived* derived = dynamic_cast<Derived*>(base);
Run Code Online (Sandbox Code Playgroud)

我们仍然得到一个成功的向下转换,即使vtable指针in Derived2与vtable指针无关Derived.

它是如何实际工作的?如何dynamic_cast知道是否Derived2派生自Derived(如果Derived在不同的库中声明的话)?

正在寻找关于它如何实际工作的具体细节(最好是在海湾合作委员会,但其他人也很好).这个问题是不是一个重复这个问题(没有指明它是如何工作).

c++ dynamic-cast

35
推荐指数
3
解决办法
8999
查看次数

C++中dynamic_cast的真实例子

任何人都可以给我一个真实世界的例子,说明当需要dynamic_cast并且根本无法解决时?我能想到的例子通常可以解决双重调度问题.

如果约束太强,那么一般来说,dynamic_cast的示例也很好.

我希望看到真实的例子,而不是"它通常用于在类型树之间向上和向下转换".

c++ dynamic-cast

12
推荐指数
1
解决办法
3755
查看次数

使用任意类型的给定参数进行任意操作的任何建议?

基本上我只想使用任意类型的给定参数进行任意操作.

参数类型基类是Var,而Operation是将为给定参数执行的操作的基类.

我有Evaluator类,它包含使用opId映射的运算符集合.Evaluator将根据evaluate()成员函数中给出的opId参数进行操作,然后evaluate()函数将搜索将接受参数类型和opId的受支持运算符.

我想问的是,有没有有效的模式或算法可以在没有dynamic_cast <>和/或循环运算符集合的情况下执行此操作.

`

class Var {
public:
    bool isValidVar();
    static Var invalidVar();
}

template<typename T> class VarT : public Var {
public:
    virtual const T getValue() const;   
}

class Operator {
public:
    virtual Var evaluate(const Var& a, const Var& b) = 0;
}

template<typename T> class AddOperator : public Operator {
public:
    virtual Var evaluate(const Var& a, const Var& b)
    {                             //dynamic_cast is slow!
        const VarT<T>* varA = dynamic_cast<const VarT<T>*>(&a);
        const …
Run Code Online (Sandbox Code Playgroud)

c++ design-patterns dynamic-cast generic-programming

6
推荐指数
1
解决办法
352
查看次数

dynamic_cast如何在内部工作?

有人可以解释一下dynamic_cast内部是如何工作的吗?虚拟指针的作用是什么?

c++ rtti

3
推荐指数
1
解决办法
3575
查看次数