我正在尝试为char
编写一个自定义分配器,以便与std::basic_string
一起使用。我编写了以下代码,但无法使用 gcc.godbolt.org 上的 x86 clang 3.7 进行编译 - 请参阅the code。另一方面,GCC成功编译它。
像往常一样,有很多错误消息,其中一个是:
error: 'rebind' following the 'template' keyword does not refer to a template
到目前为止我的工作:
#include <algorithm>
#include <string>
#include <iostream>
#include <type_traits>
#include <cstring>
template <typename Tp>
struct my_allocator {
};
template <>
struct my_allocator<char> {
char arr[30];
typedef char value_type;
my_allocator()
{
std::cout<<"ctor\n";
}
template <class T>
my_allocator(const my_allocator<T>& other)
{
std::cout<<"copy_ctor\n";
std::memcpy(arr,other.arr,30);
}
char* allocate(std::size_t )
{
std::cout<<"allocated\n";
return arr;
}
void deallocate(char* , std::size_t )
{
std::cout<<"freed\n";
}
};
typedef std::basic_string<char,std::char_traits<char>, my_allocator<char> > my_string;
int main()
{
my_string a("hello");
std::cout<<a;
}