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
的名字空间()里,以和现在的标准库做区别。
TR1包含以下组件:
一个wrapper reference是由模板类reference_wrapper
产生的实体()获得。wrapper reference近似于C++语言中的引用。
使用ref
以获得任何实例的wrapper reference(对常数引用const &使用cref
)。
wrapper reference对模板函数(template function)尤其有用,当模板参数推导不出引用的时候(示例如下:)
void f( int &r ) { r++; }template< class Funct, class Arg >void g( Funct f, Arg t ){ f(t);}int main(){ int i = 0; g( f, i ); // 'g< void(int &r), int >' 被实例化 cout << i << endl; // 輸出:0 g( f, ref(i) ); // 'g< void(int &r), reference_wrapper<int> >' 被实例化 cout << i << endl; // 輸出:1}