gpt4 book ai didi

c++ - 在 C++ 中,检查一个基类的两个实例是否属于同一个子类

转载 作者:可可西里 更新时间:2023-11-01 16:25:58 24 4
gpt4 key购买 nike

下面的代码解释了这个问题。填写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
}

编辑:

当我查看我的应用程序时,我需要一些与上面略有不同的东西。我需要能够按 type_id 对实例进行分组。

仅供引用。我有一个迷你符号代数系统,因此要进行操作,有时了解类类型对于排序和重新排列表达式很重要。

因此,给定一个指向实例的指针 vector ,如何根据它们的 type_id 对它们进行分组。我要么需要能够对 type_id 进行哈希处理,要么为每个类生成一个唯一的整数。

最佳答案

如果可以使用RTTI,

typeid(*a1) == typeid(*a2)

我觉得你也需要

#include <typeinfo>

而且您的类中必须有一个虚函数,这样 vtable 才能存在——析构函数应该没问题。

更新:

我不确定我是否完全理解您对分组的要求(您需要某种确定性排序吗?子类应该发生什么?),但您可以尝试使用 valuetypeid 运算符返回到:

  • 散列从 typeid(*ptr).name() 返回的字符串
  • 使用 typeid(*a1).before(typeid(*a2)) 作为排序标准。但是,这在运行之间没有任何确定性。

通常,在考虑 RTTI 时,最好看看是否可以使用精心设计的虚函数(例如 double dispatch)更好地完成这些任务。不过,我真的不能说您的情况是否有更好的选择,因为我不了解具体情况。

关于c++ - 在 C++ 中,检查一个基类的两个实例是否属于同一个子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3863567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com