小编Kri*_*rid的帖子

子类化STL-Containers:范围构造函数不起作用

许多STL容器都有一个范围构造函数,可用于初始化容器元素:

char ary[] = {'a', 'b', 'c'};
vector<char> v(ary, ary + 3);
Run Code Online (Sandbox Code Playgroud)

我将特定的STL容器子类化,仅用于默认使用自定义分配器:

template<class _Ty, class _Ax = stl_allocator<_Ty> >
class xvector
    : public std::vector<_Ty, _Ax>
{
};
Run Code Online (Sandbox Code Playgroud)

这很好用,但我不能再使用范围构造函数了:

xvector<char> v2(ary, ary + 3);
Run Code Online (Sandbox Code Playgroud)

生成以下错误:

error C2661: 'xvector<_Ty>::xvector' : no overloaded function takes 2 arguments
    with
    [
        _Ty=char
    ]
Run Code Online (Sandbox Code Playgroud)

但是,我可以使用assign方法:

xvector<char> v3;
v3.assign(ary, ary + 3);
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么范围构造函数在赋值方法时不起作用?我正在使用VC++ 2008,从我可以告诉范围构造函数的参数列表和assign方法完全相同.

更新 感谢您的回答,但对我而言,关键是我忘记了构造函数不是继承的,因此只有默认构造函数可用(它与范围构造函数没有任何关系).

我也应该提到我不得不坚持使用VS2008/C++ 03,因为目标平台不支持更新的编译器.

c++ templates stl allocator

0
推荐指数
1
解决办法
64
查看次数

标签 统计

allocator ×1

c++ ×1

stl ×1

templates ×1