Как dynamic_cast обычно реализуется?

Действительно ли проверка типа является простым целочисленным сравнением? Или имело бы смысл иметь a 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.

6
задан Yu Hao 29 July 2013 в 07:22
поделиться