如何在使用容器和字符串时强制使用显式分配器类型参数
How to force use of explicit allocator type parameters when using containers and strings
我想在使用标准容器(包括字符串(时强制使用显式分配器模板类型参数。
显然,我可以通过修改编译系统附带的标头来删除分配器参数的默认值来做到这一点。 但这引入了维护问题,并且(对于某些编译系统(甚至可能需要使用自定义编译的运行时。
在语言中执行此操作的最简单方法是什么? 最好通过 #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
.
相关文章:
- 在 c++ 中的模板实例化中使用带有构造函数的类作为类型参数
- 如何解决一元"*"(有"字符")错误的无效类型参数?
- "std::shared_ptr":不是参数"_Ty"的有效模板类型参数
- 具有可变参数非类型参数的模板专用化
- 函数类型参数的模板参数推导
- PowerShell 使用结构类型参数调用 C++ DLL 的导出函数
- 对于非常量指针类型的参数,未调用具有常量指针模板类型参数的功能
- 为模板传递非类型参数 agument
- 为什么带有类型参数的运算符 () 可以应用于 result_of 上下文中的类型?
- 使用其他模板类型参数作为要在函数签名中使用的类型别名声明
- 如何避免具有相同类型参数的函数中的错误
- 将内置类型变量传递给只有一个类类型参数的"+"运算符函数时自动类型转换的构造函数
- c++非类型参数包扩展
- 如何实现对参数顺序不可知的std::same_as的广义形式(即对于两个以上的类型参数)
- 在不同的模板参数包之间分发非类型参数包
- 如何在使用容器和字符串时强制使用显式分配器类型参数
- 错误:一元"*"的类型参数无效(具有"int"):使用 mergesort 计算
- EXPECT_CALL具有 unique_ptr 引用类型参数的模拟函数
- 作为模板类型参数,为什么 type[N] 与其专用版本不匹配----模板<类 T>类 S<T[]>
- 用于分配器类型参数的C++设计模式