我正在使用提到here的STL分配器。
我正在做的唯一改变是我继承了一个名为Object的基类,我使用基类'new和delete函数进行分配。
class MyAlloc :public Object{
......
}
我想使用基类的参数化构造函数,它将基于发送到STLAllocator的参数,这将是这样的。
MyAlloc(A *a) : Object(a) {
... }
然后使用这个构造函数,如:
A *a = new A();
std::vector<int,MyAlloc<int> (a) > v;
我无法实现这一目标。这导致编译错误:左'a'不能出现在常量表达式中模板参数2无效
提前感谢.. :))
答案 0 :(得分:4)
您将分配器的类型指定为模板参数,如果您不想使用默认构造的值,则将值指定为构造函数参数:< / p>
std::vector<int,MyAlloc<int>> v((MyAlloc<int>(a)));
请注意,我添加了一对额外的括号以避免"most vexing parse"。在这种情况下,我们无法避免使用大括号初始化,因为这将尝试使用初始化列表来填充向量。