所有类的C ++公共基指针上升,下行和侧向

时间:2018-04-12 12:26:51

标签: c++ casting dynamic-cast

我有一个具有多个(多个)继承级别的复杂代码。该算法直接在代码中实现(无需文档),创建依赖关系网。基本概念如下:

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将根据演员表的不同而有所不同:

  • dynamic_cast<A*>(this)
  • dynamic_cast<Base*>(this)
  • dynamic_cast<Interface*>(this)

这三个人都有不同的价值观。在c ++中是否有一种方法可以将指针转换为最“基本”的形式?这是new

返回的值

1 个答案:

答案 0 :(得分:3)

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