gpt4 book ai didi

c++ - dynamic_cast 通常是如何实现的?

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

类型检查仅仅是整数比较吗?或者有一个 GetTypeId 虚拟函数来区分哪个使其成为整数比较有意义吗?

(只是不想让事情成为类名上的字符串比较)

编辑:我的意思是,如果我经常期待错误的类型,使用类似的东西是否有意义:

struct Token
{
enum {
AND,
OR,
IF
};
virtual std::size_t GetTokenId() = 0;
};

struct AndToken : public Token
{
std::size_t GetTokenId() { return AND; }
};

并使用 GetTokenId 成员而不是依赖于 dynamic_cast

最佳答案

dynamic_cast 的功能远远超出了简单的类型检查。如果它只是一个类型检查,它会很容易实现(就像你在原来的帖子中所做的那样)。

除了类型检查之外,dynamic_cast 还可以执行转换为 void * 和分层交叉转换。这些类型的转换在概念上需要某种在两个方向(向上和向下)遍历类层次结构的能力。支持此类转换所需的数据结构比单纯的标量类型 id 更复杂。 dynamic_cast 使用的信息是 RTTI 的一部分。

试图在这里描述它会适得其反。我曾经有一个很好的链接,它描述了 RTTI 的一种可能实现方式……我会尝试找到它。

关于c++ - dynamic_cast 通常是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3314944/

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