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