c – 普通的分配器识别容器?
发布时间:2020-12-16 07:17:26 所属栏目:百科 来源:网络整理
导读:我正在学习/玩分配器试图理解它是如何工作的.但是我在尝试实现接受分配器的普通容器时遇到了问题.现在我最终得到了这个: templateclass T,class Allocator =std::allocatorT class Container {public: using allocator_type = Allocator; using value_type
我正在学习/玩分配器试图理解它是如何工作的.但是我在尝试实现接受分配器的普通容器时遇到了问题.现在我最终得到了这个:
template<class T,class Allocator =std::allocator<T>> class Container { public: using allocator_type = Allocator; using value_type = T; using pointer = typename std::allocator_traits<allocator_type>::pointer; using reference = value_type&; using size_type = std::size_t; Container( size_type n =0,const allocator_type& allocator =allocator_type() ){ std::cout << "ctor" << std::endl; allocator.allocate(n); }; }; int main(int argc,const char* argv[]){ Container<int> c {5}; return 0; } 它给了我一个错误成员函数’allocate’不可行:’this’参数有’const allocator_type’类型(又名’const std :: __ 1 :: allocator< int>‘),但是函数没有标记为const 请问如何解决这个错误?我错过了什么吗? 解决方法
你的路线
allocator.allocate(n); 尝试调用allocator的allocate方法,该方法未定义为const方法.但是,如果你看,分配器的类型是const allocator_type&,即对allocator_type的const引用. 那你怎么用呢?使用const对象(或引用一个)通常可以做的一件事是从中构造一个不同的非const对象.例如,这构建: allocator_type(allocator).allocate(n); 正如SergeyA在评论中正确指出的那样,通常不构造临时的ad-hoc allocator_type,而是建立这样的成员: allocator_type m_alloc; // Should probably be private Container( size_type n =0,const allocator_type& allocator =allocator_type() ) : m_alloc{allocator}{ std::cout << "ctor" << std::endl; m_alloc.allocate(n); }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |