我有一个具有多个(多个)继承级别的复杂代码。该算法直接在代码中实现(无需文档),创建依赖关系网。基本概念如下:
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
?
答案 0 :(得分:3)
是的,这正是dynamic_cast<void*>(this)
的目的
但由于该语言无法静态知道该类型的类型,因此只能返回void*
。