在模板 class 中使用 std::allocator 时出错
Error when using the std::allocator in the template class
正在尝试了解如何使用 std::allocator。
#include <iostream>
template <typename T, typename A>
struct vector_base
{
A allocator;
T* data;
size_t size;
size_t space;
vector_base(const A &alloc, size_t n)
:allocator(alloc), data(alloc.allocate(n)), size(n), space(n)
{}
~vector_base() {allocator.deallocate(data, space);}
};
int main() {
std::allocator<int> my_allocator;
vector_base<int, std::allocator<int>> vector(my_allocator, 10);
return 0;
}
错误:
error: passing ‘const std::allocator’ as ‘this’ argument discards
qualifiers [-fpermissive]
:allocator(alloc), data(alloc.allocate(n)), size(n), space(n)
alloc
是一个 const&
,你试图调用 allocate
它是一个 non-const 方法,这是不允许的。
改为在您的初始化成员上调用 allocate
:
vector_base(const A &alloc, size_t n)
:allocator(alloc), data(allocator.allocate(n)), size(n), space(n)
{}
正在尝试了解如何使用 std::allocator。
#include <iostream>
template <typename T, typename A>
struct vector_base
{
A allocator;
T* data;
size_t size;
size_t space;
vector_base(const A &alloc, size_t n)
:allocator(alloc), data(alloc.allocate(n)), size(n), space(n)
{}
~vector_base() {allocator.deallocate(data, space);}
};
int main() {
std::allocator<int> my_allocator;
vector_base<int, std::allocator<int>> vector(my_allocator, 10);
return 0;
}
错误:
error: passing ‘const std::allocator’ as ‘this’ argument discards qualifiers [-fpermissive] :allocator(alloc), data(alloc.allocate(n)), size(n), space(n)
alloc
是一个 const&
,你试图调用 allocate
它是一个 non-const 方法,这是不允许的。
改为在您的初始化成员上调用 allocate
:
vector_base(const A &alloc, size_t n)
:allocator(alloc), data(allocator.allocate(n)), size(n), space(n)
{}