gpt4 book ai didi

c++ - 公共(public)基类的派生类的 TypeID

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:36:02 33 4
gpt4 key购买 nike

我正试图在 C++ 中实现某种机制,从而为从公共(public)基类派生的所有类分配一个唯一的“类 ID”。例如:

class BaseClass  
{
//...
public: unsigned int GetID( void );
//...
};
class DerivedClass : public BaseClass
{
}

DerivedClass 类和 BaseClass 的所有其他子类应该能够返回唯一标识符,而无需向 DerivedClass 添加任何额外代码……然而,C++ 使这对我来说相当困难。任何想法将不胜感激。

提前致谢!---丹

最佳答案

你应该听听 Alf 的话 :) 这是我的分析:在纯粹的世界中,实现的识别威胁虚函数多态性,不需要也不应该需要。

在真实编程的肮脏世界中,您可能出于某些原因需要唯一标识,例如将数据编码到磁盘、标识诊断消息、跟踪控制流、累积使用统计信息等。

如果你的想法是纯粹的,那么你的设计就是错误的。走开,弄清楚为什么你不能要求一个唯一的 id。

如果你的想法被现实腐 eclipse ,那么你已经愿意在性能和内存上付出代价来满足你的要求,然后通过规范,使用内置语言特性的成本是值得付出的,因为它是几乎是实现提供非侵入性识别服务目标的唯一途径。非侵入性是指您不需要向每个派生类添加任何内容。显然必须添加一些东西,所以如果您不愿意这样做,您别无选择,只能接受编译器为您添加的东西。

这里的主要问题是,如果您使用动态加载的共享库 (DLLS),RTTI 可能无法按预期工作。这不仅对 typeid 产生不利影响,它还可以防止捕获您期望被捕获的异常(我被咬过!)。可能需要注意确保 vtables 和其他 RTTI 是唯一创建的。这可能意味着,例如,如果 vtables Hook 在您的析构函数上,则它不是内联的,因为在这种情况下它可能在多个地方生成,从而破坏了唯一性。在没有 ISO 标准化支持动态加载的情况下,可能需要进行一些修改。

关于c++ - 公共(public)基类的派生类的 TypeID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4282058/

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