Effective C++之条款54

条款54:让自己熟悉包括TR1在内的标准程序库

    C++98列入的C++标准 程序库有哪些主要成分:

  • STL(Standard Template Library),覆盖容器、迭代器、算法、函数对象、各种容器适配器和函数对象适配器。
  • Iostreams,覆盖用户自定缓冲功能、国际化I/O,以及预先定义好的对象cin,cout,cerr和clog。
  • 国际化支持,包括多区域能力,像wchar_t和wstring等类型都对促进unicode有所帮助。
  • 数值处理,包括复数模板和纯数值数组。
  • 异常阶层体系,包括base class exception及其derived classes logic_error和runtime_error,以及更深继承的各个classes。
  • C89标准程序库。1989 C标准程序库内的每个东西也都被覆盖于C++内。

    TR1详细叙述了14个新组件,统统都放在std命名空间内,更正确地说是在其嵌套命名空间tr1内。因此TR1组件shared_ptr的全名是std::tr1::shared_ptr。本书通常在讨论标准程序库组件时略而不写std::,但我总是会在TR1组件之前加上tr1::。

    本书展示以下TR1组件实例:

  • 智能指针tr1::shared_ptr和tr1::weak_ptr。前者的作用有如内置指针,但会记录有多少个tr1::shared_ptrs共同指向同一个对象。这便是所谓的reference counting。
  • tr1::function,此物得以表示任何callable entity(可调用物,也就是任何函数或函数对象),只要其签名符合目标。假设我们想注册一个callback函数,该函数接受一个int并返回一个string,我们可以这么写:
void registerCallback(string func(int)); //参数类型是函数,该函数接受一个int并返回一个string

    其中参数名称func可有可无,所以上述的registerCallback也可以这样声明:

void registerCallback(string (int));

    tr1::function使上述的RegisterCallback有可能更富弹性地接受可调用物,只要这个可调用物接受一个int或任何可转换为int的东西,并返回一个string或任何可被转换为string的东西。tr1::function是个template,以其目标函数的签名为参数:

void registerCallback(tr1::function<string (int)>func);
  • tr1::bind,它能够做STL绑定器bindlst和bind2nd所作的每一件事,而又更多。
  • Hash tables,用来实现sets,multisets,maps和multi-maps。每个新容器的接口都以前任(TR1之前的)对应容器塑膜而成。
  • 正则表达式,包括以正则表达式为基础的字符串查找和替换,或是从某个匹配字符串到另一个匹配字符串的逐一迭代等等。
  • Tuples,这是标准程序库中的pair_template的新一代制品。pair只能持有两个对象,tr1::tuple可持有任意个数的对象。
  • tr1::array,本质上是个“STL化”数组,即一个支持成员函数如begin和end的数组,不过tr1::array的大小固定,并不适用动态内存。
  • tr1::mem_fn,这是个语句构造上与成员函数指针一致的东西。tr1::mem_fn纳入并扩充了C++98的men_fun和mem_fun_ref的能力。
  • tr1::reference_wrapper,一个“让references的行为更像对象”的设施。它可以造成容器“犹如持有references”。而容器实际上只能持有对象或指针。
  • 随机数 生成工具,它大大超越了rand,那是C++继承自C标准程序库的一个函数。
  • 数学特殊函数,包括Lagnuerre多项式、Bessel函数、完全椭圆积分,以及更多数学函数。
  • C99兼容扩充。这是一大堆函数和模板,用来将许多新的C99程序库特性带进C++。

    第二组TR1组件有更精巧的template编程技术构成:

  • Type traits,一组traits class,用以提供类型的编译期信息。(见条款47)
  • tr1::result_of,这是个template,用来推导函数调用的返回类型。当我们编写template时,能够“指涉函数调用动作所返回的对象的类型”往往很重要,但是该类型有可能以复杂的方式取决于函数的参数类型。tr1::result_of使得“指涉函数返回类型”变得十分容易。

请记住

  • C++标准程序库的主要机能由STL、iostreams、locales组成。并包含C99标准程序库。
  • TR1添加了智能指针、一般化函数指针、hash-based容器、正则表达式以及另外10个组件的支持。
  • TR1自身只是一份规范,为获得TR1提供的好处,你需要一份实物。一个好的实物来源是Boost。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值