dynamic_cast通常如何实现?

Bil*_*eal 6 c++ dynamic-cast

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

(只是不希望事物成为类名的字符串比较)

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

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

struct AndToken : public Token
{
    std::size_t GetTokenId() { return AND; }
};
Run Code Online (Sandbox Code Playgroud)

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

AnT*_*AnT 6

的功能 dynamic_cast远远超出了简单的类型检查.如果它只是一种类型检查,它将很容易实现(就像你在原帖中所拥有的那样).

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

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

  • @Billy ONeal:嗯,是的......如果你真的需要它.除了我不明白为什么你决定使用`size_t`作为返回类型.`size_t`与这一切无关. (2认同)