我想在使用标准容器(包括字符串)时强制使用显式分配器模板类型参数。
显然,我可以通过修改编译系统附带的 header 来删除分配器参数的默认值来完成此操作。但这引入了维护问题,并且(对于某些编译系统)甚至可能需要使用自定义编译的运行时。
在语言中最简单的方法是什么?最好是通过#include 标准 header (例如 <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
。
关于c++ - 使用容器和字符串时如何强制使用显式分配器类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45852774/