首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不将"std::allocator“转换为"const allocator_type”

不将"std::allocator“转换为"const allocator_type”
EN

Stack Overflow用户
提问于 2014-08-11 19:58:20
回答 1查看 186关注 0票数 0

我正在尝试实现一个与C++11中的MKL一起使用的对齐分配器。

代码语言:javascript
复制
template <typename T, size_t TALIGN = 16, size_t TBLOCK = 4>
class aligned_allocator : public std::allocator<T>
{
    typedef typename std::allocator<T>::pointer pointer;
    typedef typename std::allocator<T>::size_type size_type;
public:
    pointer allocate(size_type n, const void *hint = nullptr);
    void deallocate(pointer p, size_type n);
};

在其他地方,我有:

代码语言:javascript
复制
template<typename T> using aligned_vector = std::vector<T, aligned_allocator<T>>;

最后,我有一个操作符超载:

代码语言:javascript
复制
inline aligned_vector<double> operator+(aligned_vector<double> x, aligned_vector<double> y)
{
    aligned_vector<double> z(x.size());
    vdAdd(x.size(), x.data(), y.data(), z.data());
    return z;
}

所有这些都在iccclang下完美地编译和工作,但是使用GCC 4.9,它不会编译,除非我让xy都是const引用。为什么GCC要求这个,而其他人却不这样做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-11 20:11:38

你错过了rebind

代码语言:javascript
复制
template <typename U> struct rebind { typedef aligned_allocator<U> other; };

也就是说,您不应该继承std::allocatorWhy not to inherit from std::allocator

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25251356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档