Класс Wrapper для type_info

Итак, я нашел этот довольно хороший урок о событиях в 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 — это работает для индивидуальной идентификации класса? Или я не понял, что он имеет в виду под «оберткой» в данном случае?

0

Решение

Единственное упоминание о 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 упростить реализацию. «Обертка» не подразумевает наследование или прямое членство.

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

2

Другие решения

Я задал себе тот же вопрос об этой статье, но потом понял, что листинг кода должен быть предоставлен, и это так.
Так 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;
};
0

По вопросам рекламы [email protected]