我正在使用这里提到的 STL 分配器。
我所做的唯一更改是我从一个名为 Object 的基类继承,并且我使用基类的 new 和 delete 函数进行分配。
class MyAlloc :public Object{
......
}
Run Code Online (Sandbox Code Playgroud)
我想使用基类的参数化构造函数,它将基于发送到 STLAllocator 的参数,这将是这样的。
MyAlloc(A *a) : Object(a) {
... }
Run Code Online (Sandbox Code Playgroud)
然后使用这个构造函数,如:
A *a = new A();
std::vector<int,MyAlloc<int> (a) > v;
Run Code Online (Sandbox Code Playgroud)
我无法实现这一目标。它导致编译错误:
'a'不能出现在常量表达式
模板参数 2 中无效
提前致谢..:)
您将分配器的类型指定为模板参数,如果您不想要默认构造的类型,则指定一个值作为构造函数参数:
std::vector<int,MyAlloc<int>> v((MyAlloc<int>(a)));
Run Code Online (Sandbox Code Playgroud)
请注意,我添加了一对额外的括号以避免“最烦人的解析”。在这种情况下,我们无法避免使用大括号初始化,因为这将尝试使用初始化列表来填充向量。
| 归档时间: |
|
| 查看次数: |
1385 次 |
| 最近记录: |