如何在使用容器和字符串时强制使用显式分配器类型参数

How to force use of explicit allocator type parameters when using containers and strings

本文关键字:类型参数 分配器 字符串      更新时间:2023-10-16

我想在使用标准容器(包括字符串(时强制使用显式分配器模板类型参数。

显然,我可以通过修改编译系统附带的标头来删除分配器参数的默认值来做到这一点。 但这引入了维护问题,并且(对于某些编译系统(甚至可能需要使用自定义编译的运行时。

在语言中执行此操作的最简单方法是什么? 最好通过 #including 一个标准标头(例如,<string>(并在它之前或之后加上某种代码......或者也许将标准标头的 #include 包装在我自己的标头中(并将原始<string>排除在包含搜索路径之外(。

(激励示例:我想在整个服务器/服务中实现基于区域的内存分配,因此始终希望使用有状态地引用特定堆的分配器。 我可以将有状态分配器与 C++11 及更高版本以及一些 C++11 之前的编译系统一起使用。 我将提供一堆我自己的 typedef 和别名模板,以减轻这个系统中程序员的痛苦。我希望编译系统永远不会使用"默认"分配器的限制 - 而不是由 SCM 提交规则强制执行。 我不必担心"恶意"程序员试图打破限制,我只是不希望有人每次都犯不指定分配器的简单错误。

您可以使用别名:

template <typename T, typename A> // No default value here
using StdVector = std::vector<T, A>;

然后使用StdVector而不是std::vector.