所有 类 向上转换、向下转换和侧转换的 C++ 公共基指针

C++ Common Base Pointer of All Classes Up-casted, Down-casted and Side-casted

我有一个具有多个(多重)继承级别的复杂代码。该算法直接在代码中实现(没有文档),创建了一个依赖网络。基本概念是这样的:

class Base;
class Interface;

class A : public Base, public Interface {
  std::vector<child*> children;

  A() {
    auto pbox = new child("Box")
    children.push_back(pbox);
    auto psquare = new child("Square")
    children.push_back(psquare);
    auto pcircle = new child("Circle");
    children.push_back(pcircle);

    global::edge(this, pbox);
    global::edge(this, psquare);
    global::edge(this, pcircle);
  }

  virtual void add_child( child * pchild ) {
    children.push_back(pchild);
    global::edge(this, pchild);
  }

我想通过插入静态函数 global::edge 来映射它们来发现依赖关系网。

但是:

this 将根据演员表进行不同的解析:

这三个都有不同的值。 c++ 中有没有一种方法可以将指针转换为最 'basic' 形式?那就是 new?

返回的值

是的,这正是dynamic_cast<void*>(this)的目的。
但是由于语言无法静态知道类型是什么,因此您只能得到 void* 返回。