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

标签 c++ c++11 templates

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

显然,我可以通过修改编译系统附带的 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/

相关文章:

c++ - 我不能再将 char[M][N] 类型分配给 gcc 4.9 上的 std::vector

c++ - to_string 不是 std 的成员,g++ (mingw)

python - Jinja2 网络自动化 - 增加一个变量(子网+1)

如果可能,C++ 通过右值引用传递参数,否则复制左值引用

c++ - CMake,GLFW3 OSX 链接错误

c++ - 不能在 C++ 中使用宏

c++ - 如何一次获取所有重复的符号链接(symbolic link)器错误?

c++ - 错误地使用 move 的值

c++ - 这个可变参数模板代码有什么作用?

c++ - 棘手的多态性和虚函数