设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 编程开发 >> 其他开发语言 >> 泛型 :基于策略的basic_string实现
精品推荐
其他开发语言点击TOP10
·数字小键盘指法练习
·用C语言编通讯录程序(初学者级别的)
·Modem 常用AT指令集
·单片机模拟I2C总线及24C02(I2C EEPROM)读写实例(源代码)
·C++经典电子书下载
·Thinking in C++ 简体中文第二版
·debug和release的区别
·error LNK2001: unresolved external symbol __ftol2 错误解决
·C库函数手册
·一个简单的C语言编译器
编程开发点击TOP10
·数字小键盘指法练习
·ASP.NET 程序中常用的三十三种代码
·用C语言编通讯录程序(初学者级别的)
·我写的Java学生成绩管理系统源代码
·CHK文件恢复工具
·Modem 常用AT指令集
·java笔试题
·异常java.sql.SQLException: Io exception:The Network Adapter could not establish connection
·单片机模拟I2C总线及24C02(I2C EEPROM)读写实例(源代码)
·C++经典电子书下载
精选专题

泛型 :基于策略的basic_string实现

作者: 来源:网络文章 时间:2005-12-17 20:57:28

泛型 :基于策略的basic_string实现(2)   class T = char_traits<E>,
  class A = allocator<E> >
 class basic_string;
}

E是字符串的字符类型(大多数情况下,不是char就是wchar_t),T控制字符串如何比较和拷贝,A是分配器(allocator),它正如我们都知道的:爱它,但从不用它。我们要增加第四个模板参数,控制字符串的真正实现。因为它真正处理字符串的存储,我们叫它Storage策略
 我们叫我们的新字符串flex_string,因为,你们很快就会看到,它是多么的灵活(flexible)

template <class E,
 class T = char_traits<E>,
 class A = allocator<E>,
 class Storage = AllocatorStringStorage<E, A> >
class flex_string;

Storage的默认值是AllocatorStringStorage<E,A<,这是一个直观的存储实现,使用热情拷贝(eager copy)(某种COW的对立面)。在其实现中,flex_string保存一个Storage对象并使用它的内部类型和成员函数。
 你选择的Storage的接口可能会有些微区别。基本上,当我浏览了几遍我的basic_string实现后,我发现了如果没有一些函数我就不可能提供实现,而且这些函数也不会太多,这里是一个Storage策略实现必须满足的半正式的条件规格

template <typename E, 其他参数<
class StorageImpl
{
public:
 typedef 某类型 size_type;
 typedef 某类型 iterator;;
 typedef 某类型 const_iterator;
 typedef 某类型 allocator_type;

 StorageImpl(const StorageImpl &);
 StorageImpl(const allocator_type&);
 StorageImpl(const E* s, size_type len, const allocator_type& a);
 StorageImpl(size_type len, E, const allocator_type&);

 iterator begin();
 const_iterator begin() const;
 iterator end();
 const_iterator end() const;
 size_type size() const;
 size_type max_size() const;
 size_type capacity() const;

 void resize(size_type, E);
 void reserve(size_type);
 void swap(StorageImpl&);
 const E* c_str() const;
 const E* data() const;
 allocator_type get_allocator() const;
};

 这些足够了。规范很简单(而且如果没有allocator这个还会更简单)。这里的想法是你能够最终借助Storage中很少的核心类型和函数有效地实现basic_string的整个接口。
 Flex_string类保存一个Storage对象的值。我为了一些小小的方便选择私有继承。这样,供下载代码中的flex_string就象这样。

template <class E,
 class T = std::char_traits<E>,
 class A = std::allocator<E>,

共6页 9 7 [1] [2] [3] [4] [5] [68 :>

泛型 :基于策略的basic_string实现 相关文章:
泛型 :基于策略的basic_string实现 相关软件:
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
转载请注明来源:http://www.xgdown.com