例如:
class Base{...};
class Sub1 : public Base{...};
class Sub2 : public Base{...};
Sub1 s1;
Sub2 s2;
bool is_same_base(void *obj1, void *obj2){
...
}
if(is_same_base(s1,s2){
printf("Great! S1 and S2 and from same base class!\n");
}
在这种情况下,我不确定知道obj1和obj2是否派生相同基类的最好/最快方法是什么?
一种可能但最慢的方法是逐个比较虚拟表条目,如果两个虚拟表中都存在任何函数指针,那么我可以说它们是从相同的基类派生的。这效率不高。
有任何评论吗?
答案 0 :(得分:3)
你必须知道基类。如果不知道要动态转换为什么类型,则无法使用动态强制转换。还有typeid,但同样,它不会给你基类。
以下是我看到它的方式:
换句话说,你无法阻止你自己简单地查找公共基类,所以我不明白为什么你需要首先做这个。
编辑:你不能使用void指针,因为那样你就丢掉了类型信息。你可以做这种事情的唯一方法是在编译时,使用模板元编程(我可能是错的),但是你的类需要在编写时考虑到这种用法。从我所知,看起来修改原始类代码似乎不是一种选择。