代码之家  ›  专栏  ›  技术社区  ›  user1396055

C++所有类的通用基指针上置、下置和侧置

  •  0
  • user1396055  · 技术社区  · 7 年前

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

    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 回复  |  直到 7 年前
        1
  •  3
  •   Quentin    7 年前

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