以下代码解释了问题.填写same_sub_class以检测到虚拟基类A的两个指针实际上是否是同一个具体类.
struct A {
...
}:
struct B : public A {
...
}:
struct C : public A {
...
}
bool same_sub_class(A * a1, A * a2){
// Fill this in to return true if a1 and a2 are
// of the same concrete class
}
Run Code Online (Sandbox Code Playgroud)
编辑:
当我查看我的应用程序时,我需要一些与上面略有不同的东西.我需要能够通过type_id对实例进行分组.
仅供参考.我有一个迷你符号algerbra系统,所以要进行操作,有时需要知道类类型进行排序和重新排列表达式很重要.
所以给出了一个指针向量,用于实例说明如何通过type_id对它们进行分组.我要么需要能够散列type_id,要么为每个类生成一个唯一的整数.
Tim*_*tes 19
如果你可以使用RTTI,
typeid(*a1) == typeid(*a2)
Run Code Online (Sandbox Code Playgroud)
我想你也需要
#include <typeinfo>
Run Code Online (Sandbox Code Playgroud)
并且你必须在你的类中有一个虚函数,以便vtable存在 - 析构函数应该没问题.
更新:
我不确定我是否完全理解您对分组的要求(您是否需要某种确定性排序?子子类会发生什么?),但您可以尝试使用从运算符返回的值typeid:
typeid(*ptr).name()typeid(*a1).before(typeid(*a2))作为排序标准.但是,这在运行之间没有任何确定性.通常在考虑RTTI时,最好使用精心设计的虚拟函数(例如双重调度)来查看是否可以更好地完成任何操作.我真的不能说你的情况下是否有一个好的选择,因为我不明白具体细节.
| 归档时间: |
|
| 查看次数: |
6524 次 |
| 最近记录: |