type_info的包装类

时间:2013-11-20 22:58:17

标签: c++ typeid typeinfo

所以,我在c ++中找到了关于事件的非常好的教程:

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

但是:创建者使用typeid返回的type_info的包装器。据我所知,由于type_info的=运算符不可访问,这是不可能的。因此,我无法编译他提供的代码。不幸的是,这也是他的教程工作方式的核心部分。现在,如果我只使用type_info.hash_code,我将如何解决这个问题 - 这是否可以单独识别一个类?或者在这种情况下我不理解“包装”的意思吗?

2 个答案:

答案 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)

我问自己同一个关于这篇文章的问题,但后来我意识到应该提供代码清单,而且确实如此。 因此,TypeInfotype_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;
};