所以,我在c ++中找到了关于事件的非常好的教程:
但是:创建者使用typeid返回的type_info的包装器。据我所知,由于type_info的=运算符不可访问,这是不可能的。因此,我无法编译他提供的代码。不幸的是,这也是他的教程工作方式的核心部分。现在,如果我只使用type_info.hash_code,我将如何解决这个问题 - 这是否可以单独识别一个类?或者在这种情况下我不理解“包装”的意思吗?
答案 0 :(得分:2)
该页面上唯一提到的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
的指针以简化实现。 “包装”并不意味着继承或直接成员资格。
通过引用包装的类也称为代理。
答案 1 :(得分: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;
};