c – 普通的分配器识别容器?

c – 普通的分配器识别容器?,第1张

概述我正在学习/玩分配器试图理解它是如何工作的.但是我在尝试实现接受分配器的普通容器时遇到了问题.现在我最终得到了这个: template<class T, class Allocator =std::allocator<T>> 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);    };
总结

以上是内存溢出为你收集整理的c – 普通的分配器识别容器?全部内容,希望文章能够帮你解决c – 普通的分配器识别容器?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1228402.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存