2

我正在使用这里提到的 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 无效
提前谢谢..:)

4

1 回答 1

7

您将分配器的类型指定为模板参数,如果您不想要默认构造的,则将指定为构造函数参数:

std::vector<int,MyAlloc<int>> v((MyAlloc<int>(a)));

请注意,我添加了一对额外的括号以避免“最令人烦恼的解析”。在这种情况下,我们无法避免使用大括号初始化,因为这将尝试使用初始化列表来填充向量。

于 2013-09-02T14:48:00.180 回答