gpt4 book ai didi

c++ - 在没有 RTTI 的情况下测试类型相等性

转载 作者:行者123 更新时间:2023-11-30 02:12:13 25 4
gpt4 key购买 nike

假设 BC 派生自 A。我希望能够测试从 A 派生的类的任何两个实例是否是同一类的实例,即 A* fooA* bar 都指向 B 实例,不使用 RTTI。我目前的解决方案是这样的:

class A {
protected:

typedef uintptr_t Code;
virtual Code code() const = 0;

}; // class A


class B : public A {
protected:

virtual Code code() const { return Code(&identity); }

private:

static int identity;

}; // class B


class C : public A {
protected:

virtual Code code() const { return Code(&identity); }

private:

static int identity;

}; // class C

使用此方法,operator== 可以简单地测试first.code() == second.code()。我想从派生类中删除文字 identity 并让 A 自动找到代码,这样并不是所有的派生类都必须重复这个习惯用法。同样,我强烈不希望使用 RTTI。有什么办法吗?

注意:最近看到问题[1][2] ,这不是重复的。那些张贴者想要测试他们的派生类的内容;我只是想测试身份

最佳答案

您应该只使用 RTTI 而不是重新发明轮子。

如果您坚持不使用 RTTI,您可以使用 CRTP 和函数局部静态变量来避免将函数写入每个派生类。改编 self 为维基百科编写的示例代码:http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern#Polymorphic_copy_construction

另一种方法是读取 vtable 指针(通过 this 和指针算法),但这取决于编译器和平台,因此它不可移植。

关于c++ - 在没有 RTTI 的情况下测试类型相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2242619/

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