Класс Wrapper для type_info

0

Итак, я нашел этот довольно хороший учебник о событиях в c++:

http://www.gamedev.net/page/resources/_/technical/game-programming/effective-event-handling-in-c-r2459

НО: создатель использует обертку для type_info, возвращаемую typeid. Насколько я понимаю, это невозможно из-за недоступности оператора = type_info. Таким образом, я не могу скомпилировать код, который он предоставляет. К сожалению, это также основная часть того, как работает его учебник. Теперь, как бы я обошел эту проблему, должен ли я просто использовать type_info.hash_code - выполняет ли это эту работу, чтобы индивидуально идентифицировать класс? Или я не понял, что он подразумевает под "оберткой" в этом случае?

Теги:

2 ответа

2
Лучший ответ

Единственное упоминание type_info на этой странице

TypeInfo - простая оболочка класса type_info, которая позволяет хранить его как ключ в std :: map.

С++ 11 имеет std::type_index в <typeindex> который выполняет именно эту роль. В общем случае элементы map не обязательно должны быть назначаемыми, как и для С++ 11, но type_info прежнему не может использоваться напрямую, потому что вы просто не можете его построить, кроме выражения typeid.

Спецификация для std::type_index отмечает, что она может содержать указатель на std::type_info для упрощения реализации. "Обертка" не предполагает наследования или прямого членства.

Класс, который обертывается ссылкой, также известен как прокси.

  • 0
    Итак, мне даже не нужна никакая оболочка, я могу просто напрямую использовать type_index?
  • 0
    @ user1071988 Да, но это часть C ++ 11. Вы, вероятно, можете получить консервированную версию где-нибудь еще. Если эта статья на самом деле не предоставляет источник или ссылку, это немного противно, но проверьте обычные подозреваемые, такие как Boost. Это легко написать, несмотря на указатель, потому что каждый объект type_info имеет неопределенное время жизни. Вы можете просто инициализировать любой указатель с помощью & typeid( foo ) потому что это уже указатель на global.
0

Я задал себе тот же вопрос об этой точной статье, но потом понял, что список кодов должен быть предоставлен, и это было так. Таким образом TypeInfo является простой оболочкой вокруг type_info.

class TypeInfo{
public:
    explicit TypeInfo(const type_info& info) : _typeInfo(info) {};
    bool operator < (const TypeInfo& rhs) const{
        return _typeInfo.before(rhs._typeInfo) != 0;
    }
private:
    const type_info& _typeInfo;
};

Ещё вопросы

Сообщество Overcoder
Наверх
Меню