Итак, я нашел этот довольно хороший учебник о событиях в c++:
НО: создатель использует обертку для type_info, возвращаемую typeid. Насколько я понимаю, это невозможно из-за недоступности оператора = type_info. Таким образом, я не могу скомпилировать код, который он предоставляет. К сожалению, это также основная часть того, как работает его учебник. Теперь, как бы я обошел эту проблему, должен ли я просто использовать type_info.hash_code - выполняет ли это эту работу, чтобы индивидуально идентифицировать класс? Или я не понял, что он подразумевает под "оберткой" в этом случае?
Единственное упоминание type_info
на этой странице
TypeInfo - простая оболочка класса type_info, которая позволяет хранить его как ключ в std :: map.
С++ 11 имеет std::type_index
в <typeindex>
который выполняет именно эту роль. В общем случае элементы map
не обязательно должны быть назначаемыми, как и для С++ 11, но type_info
прежнему не может использоваться напрямую, потому что вы просто не можете его построить, кроме выражения typeid
.
Спецификация для std::type_index
отмечает, что она может содержать указатель на std::type_info
для упрощения реализации. "Обертка" не предполагает наследования или прямого членства.
Класс, который обертывается ссылкой, также известен как прокси.
Я задал себе тот же вопрос об этой точной статье, но потом понял, что список кодов должен быть предоставлен, и это было так. Таким образом 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;
};
type_info
имеет неопределенное время жизни. Вы можете просто инициализировать любой указатель с помощью& typeid( foo )
потому что это уже указатель на global.