C++ libstdc和x2B的基本字符串实现+;在GCC和自定义指针中
我最近试图学习libstdc++源代码(gcc7.2),但感到困惑。可能我错过了一些重要的东西,但是我开始认为不可能实现<>强> Basic字符串St/ <强>类,完全符合C++标准。p> 这是我面临的一个问题C++ libstdc和x2B的基本字符串实现+;在GCC和自定义指针中,c++,pointers,language-lawyer,stdstring,allocator,C++,Pointers,Language Lawyer,Stdstring,Allocator,我最近试图学习libstdc++源代码(gcc7.2),但感到困惑。可能我错过了一些重要的东西,但是我开始认为不可能实现强> Basic字符串St/ 类,完全符合C++标准。p> 这是我面临的一个问题 basic_string应该能够接受自定义分配器类作为模板参数 分配方法是分配器的一部分 allocate允许返回用户定义类型的对象,该对象“充当指向已分配数据的指针”。让我们称它为我的指针 my_指针应仅满足空指针和随机访问迭代器的要求。所有其他要求都是可选的。根据标准,我们可能无法将我的\u指
谢谢大家! 标准中有几个要求,它们共同确保转换是可能的,至少是间接的
基本字符串
,图表
和分配器{u特征为分配器::指针
或分配器::值{u类型*
- 在前一种情况下,给定一个
Allocator::pointer
p
,*p
为Allocator::value\u type&
- 在后一种情况下,一切都是琐碎的
Allocator::pointer
是一个,它要求给定一个连续迭代器q
,*(q+n)==*(addressof(*q)+n)
分配器
a
,a.allocate(n)
返回一个分配器::指针
template<typename charT, typename traits = /* ... */, typename Allocator = /* ... */>
class basic_string
{
typename std::allocator_traits<Allocator>::pointer _data;
// ...
public:
charT* c_str() { return std::addressof(*_data); }
// ...
};
模板
类基本字符串
{
typename std::分配器\特性::指针\数据;
// ...
公众:
charT*c_str(){return std::addressof(*_data);}
// ...
};
其中
\u data
可能存储以前调用Allocator::allocate
的结果我变得更聪明的一天可能会到来,但不是今天。谢谢你的帮助!你的回答很有用。