C++ Technical Report 1

C++ Technical Report 1(TR1)ISO/IEC TR 19768, C++ Library Extensions(函式庫擴充)的一般名稱。TR1是一份文件,內容提出了對C++標準函式庫的追加項目。這些追加項目包括了正则表达式、智能指针、哈希表、随机数生成器等。TR1自己並非標準,它是一份草稿文件。然而它所提出的項目大多数已成為的C++11及之后版本的官方標準的一部分。這份文件的目標在於「為擴充的C++標準函式庫建立更為廣泛的現成實作品」。

概要
編譯器並不需要保證包含TR1的組件,因為TR1并非官方标准的一部分。順帶一提,Boost提供了TR1大部分的實作,數個編譯器/函式庫開發商也已提供了各自的實作版本。

TR1並不代表下一屆標準的全部;舉例而言,下一屆的標準C++11包含了线程的支援。

新的組件被放置在std::tr1的命名空間(namespace)裡,以和現在的標準函式庫做區別。

TR1的內容
TR1包含以下組件:
一般用途
;引用包装器(Reference Wrapper)

  • 來自Boost.Ref
  • 在 头文件中增加了 - cref、ref、reference_wrapper
  • 可以对算法(algorithms)或仿函数(function objects)传递引用(references),而不是传递副本。

一個wrapper reference是由模板类reference_wrapper產生的實體(instance)獲得。wrapper reference近似於C++語言中的引用。

使用ref以獲得任何实例的wrapper reference(對常数引用const &使用cref)。

wrapper reference對模板函数(template function)尤其有用,當模板参数推導不出引用的時候(範例如下:)

void f( int &r ) { r++; }

template
void g( Funct f, Arg t )
{
f(t);
}

int main()
{
int i = 0;
g( f, i ); // 'g' 被实例化
cout >' 被实例化
cout

;智能指针(Smart Pointers)

  • 基于Boost Smart Pointer library
  • 由头文件增加了 - shared_ptr、weak_ptr等
  • Resource Acquisition Is Initialization(RAII)手法用於内存管理和異常安全性。

仿函数
以下四個模組被加進標頭檔之中:

;多形態的函式包裝器(Polymorphic Function Wrapper)

  • function
  • 基於Boost.Function
  • 儲存任何使用特定函式簽名的"可呼叫物"(函数指针、成員函式指针、仿函数),不需要可呼叫物確切的型別。

;仿函数綁定器(Function Object Binders)

  • bind
  • 採納自Boost Bind library
  • 標準std::bind1st和std::bind2nd的通用版
  • 將參數綁定給仿函数,並且允許函式的結合。

;函式返回型別

  • result_of
  • 採納自Boost
  • 決定函式呼叫的返回型別

;成員函式

  • mem_fn
  • 採納自Boost Mem Fn library
  • 標準std::mem_fun和std::mem_fun_ref的加強版
  • 允許成員函式指针能夠像仿函数一樣

元編程和型別特性(Type Traits)

  • 新的头文件 - is_pod、has_virtual_destructor、remove_extent等
  • 採納自Boost Type Traits library
  • 允許类编查询以及类别間的轉換,可促進元編程

數值工具
随机数產生器

  • 新的头文件 - variate_generator、mersenne_twister、poisson_distribution等
  • 採納自Boost Random Number Library

數學函式

  • 新的/头文件 - beta、legendre等
  • 23種數學函式

容器
多元組型別(Tuple Types)

  • 新標頭檔 - tuple
  • 採納自Boost Tuple library
  • 標準std::pair的擴充
  • 固定尺寸的元素集合,元素可以是不同的类型

定量陣列(Fixed Size Array)

  • 新標頭檔 - array
  • 來自Boost Array library
  • 与動態陣列型別,像是標準的std::vector相反,是静态的矩阵,但是能够享受类似于begin()等与std::vector相似的接口。

哈希表(Hash Tables)

  • 新、標頭檔
  • 完全是新的實作,不衍生自既有之程式庫。與既有之程式庫API並不完全相容
  • 就如同所有的哈希表提供常數時間的元素查找,但最壞情況查找時間與容器的大小呈線性關係。

正規表示式

  • 新標頭檔 - regex、regex_match、 regex_search、regex_replace等
  • 来自Boost RegEx library
  • pattern matching library

C的兼容性
C++被設計成與C語言兼容,但由於不同的標準,C++並不是C的嚴格超集合。TR1試圖調和這些差異,透過對各種標頭檔,如、、等進行擴充。
這些改變幫助C++能夠與C99版本的C標準更為一致(並非所有C99都包含於TR1)。

關聯項目
*C++11,C++新標準
*C99,C語言標準
*Boost library,提供大量的C++程式庫,數個包含於TR1
*STL標準模板庫,現行C++標準程式庫的一部分

参考文献
腳註
其他
*
*

外部連結
*[http://aristeia.com/EC3E/TR1_info_frames.html Scott Meyers' Effective C++: TR1 Information] - 包含TR1提案文件的連結,提供了TR1程式庫的背景以及理由。

评论 (0)

  • 还没有评论,来抢沙发吧。