将任何类型或结构存储在std::映射中

Storing any type or struct in an std::map

本文关键字:std 映射 存储 任何 类型 结构      更新时间:2023-10-16

我正在用C++编写一个基于主题的发布/订阅系统。我的通用"Event"类有三个部分:

  1. 事件类型(std::string)
  2. 实体ID(unsigned int)-这是用于游戏引擎的
  3. 事件数据(std::map<std::string,???>)

为了填充"事件数据"映射,我需要能够存储任何数据类型或结构,如int、string或Vector3(struct),以给出一些示例。我该怎么做?或者,也许有更好的方法来做到这一点。。。

另一方面,事件类型和数据名称最好使用char*还是字符串?

尝试升压:有吗?

对于您的事件类型,为什么要使用字符串?std::映射是按键值从低到高的顺序存储的。这意味着在内部,您将对字符串进行排序。一开始就尽量简单。使用枚举,这应该会让你的地图更快,尤其是考虑到它们将成为通知系统的基础。

最后,你不想使用char*,因为地图不会像你预期的那样工作:

char* key1 = "Hi";
char* key2 = "Hi";
unsigned int id;
std::map< char* ,unsigned int > mymap;
mymap.insert( std::pair<char*,unsigned int>( key1, id ) );
mymap.insert( std::pair<char*,unsigned int>( key2, id ) ); //you've just created a duplicate entry

原因是key1和key2将具有不同的地址,即使它们是相同的字符串。