所以,我发现了这个关于 C++ 事件的非常好的教程:
但是:创建者对 typeid 返回的 type_info 使用包装器。据我了解,由于 type_info 的 = 运算符不可访问,这是不可能的。因此,我无法编译他提供的代码。不幸的是,这也是他的教程工作方式的核心部分。现在,我将如何解决这个问题,我应该简单地使用 type_info.hash_code - 这是否可以单独识别一个类?还是我不明白他在这种情况下所说的“包装器”是什么意思?
所以,我发现了这个关于 C++ 事件的非常好的教程:
但是:创建者对 typeid 返回的 type_info 使用包装器。据我了解,由于 type_info 的 = 运算符不可访问,这是不可能的。因此,我无法编译他提供的代码。不幸的是,这也是他的教程工作方式的核心部分。现在,我将如何解决这个问题,我应该简单地使用 type_info.hash_code - 这是否可以单独识别一个类?还是我不明白他在这种情况下所说的“包装器”是什么意思?
该页面上唯一提到的type_info
是
TypeInfo 是 type_info 类的简单包装器,让我们可以将它作为键存储在 std::map 中。
C++11正是std::type_index
在其中完成了这个角色。<typeindex>
一般来说, a 的元素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;
};