我正在用C ++编写基于主题的发布/订阅系统。我的通用“事件”类有三个部分:
要填充“事件数据”映射,我需要能够存储任何数据类型或结构,如int,string或Vector3(struct),以提供一些示例。我怎样才能做到这一点?或者,也许有更好的方法来完成这个......
在一个不相关的说明中,对事件类型和数据名称使用char *或字符串是否更好?
答案 0 :(得分:3)
尝试boost:any?
对于您的事件类型,您为什么使用字符串? std :: maps按从低到高的键值排序存储。 这意味着在内部,您将要排序字符串。 尝试并尽可能简单地开始。使用枚举,这应该使您的地图更快,特别是因为它们将成为通知系统的基础。
最后,您不想使用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将具有不同的地址,即使它们是相同的字符串。