所有 类 向上转换、向下转换和侧转换的 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
将根据演员表进行不同的解析:
dynamic_cast<A*>(this)
dynamic_cast<Base*>(this)
dynamic_cast<Interface*>(this)
这三个都有不同的值。 c++ 中有没有一种方法可以将指针转换为最 'basic' 形式?那就是 new
?
返回的值
是的,这正是dynamic_cast<void*>(this)
的目的。
但是由于语言无法静态知道类型是什么,因此您只能得到 void*
返回。
我有一个具有多个(多重)继承级别的复杂代码。该算法直接在代码中实现(没有文档),创建了一个依赖网络。基本概念是这样的:
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++ 中有没有一种方法可以将指针转换为最 'basic' 形式?那就是 new
?
是的,这正是dynamic_cast<void*>(this)
的目的。
但是由于语言无法静态知道类型是什么,因此您只能得到 void*
返回。