我正在尝试在C ++ 11中实现一个与MKL一起使用的对齐分配器。我有:
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);
};
在其他地方,我有:
template<typename T> using aligned_vector = std::vector<T, aligned_allocator<T>>;
最后,我有这个运算符重载:
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;
}
这一切都在icc
和clang
下完全编译和运行,但是对于GCC 4.9,它不会编译,除非我使x
和y
同时引用。为什么海湾合作委员会要求其他人不这样做?
答案 0 :(得分:1)
您错过了rebind
:
template <typename U> struct rebind { typedef aligned_allocator<U> other; };
那就是说,你不应该继承std::allocator
:Why not to inherit from std::allocator