【发布时间】:2013-01-28 08:07:03
【问题描述】:
在我最近的项目中,强烈需要像std::map 这样的数据结构。但是,std::map 的默认实现使用 C++ 异常,这在 Windows 内核中是不允许的。
我认为很难在短时间内重新发明std::map 而没有任何错误或性能损失。所以,我想知道Windows内核中是否存在std::map的替换。
STLPort 可能是候选者。但我不知道如何仅提取其std::map 并禁用 C++ 异常。
【问题讨论】:
-
map抛出了什么?我所能看到的是,如果你的分配器或比较对象抛出它会抛出(你可以自己提供这些),但否则什么都不会抛出,不是吗? -
@Dave,编译器会生成异常处理代码,这与拥有自己异常机制的 Windows 内核不兼容。与运行时是否抛出异常无关。
-
尝试在禁用异常的情况下编译,不要使用
map::at?如果您的默认分配器抛出异常(我不知道它是否会),您可能还必须将分配器替换为不抛出异常的分配器。是的,使用std::vector编写关联容器很容易:如果您的map使用的是“填充地图,使用地图”而不是“添加、删除、使用、添加、删除、使用、清洗、重复”,则@基于 987654333@ 的关联容器比map快得多,并且使用的内存更少。
标签: c++ windows stl cross-platform kernel