# Informe tècnic 1 de C++

C++ Technical Report 1 (TR1) és el nom comú per a ISO/IEC TR 19768, C++ Library Extensions, que és un document que proposa addicions a la biblioteca estàndard C++ per a l'estàndard de llenguatge C++03. Les addicions inclouen expressions regulars, punters intel·ligents, taules hash i generadors de números aleatoris. TR1 no era una norma en si, sinó un esborrany de document. Tanmateix, la majoria de les seves propostes van passar a formar part de l'estàndard oficial posterior, C++11. Abans de l'estandardització de C++11, els venedors utilitzaven aquest document com a guia per crear extensions. L'objectiu de l'informe era "construir una pràctica existent més àmplia per a una biblioteca estàndard de C++ ampliada".
L'informe es va publicar per primera vegada en forma d'esborrany l'any 2005 com a Esborrany d'informe tècnic sobre les extensions de biblioteques de C++, i després es va publicar el 2007 com a estàndard ISO/IEC com a ISO/IEC TR 19768:2007.

## Visió general

Els compiladors no necessitaven incloure els components TR1 per tal d'ajustar-se a l'estàndard C++, perquè les propostes TR1 no formaven part de l'estàndard en si, només un conjunt de possibles addicions que encara estaven per ratificar. Tanmateix, la major part de TR1 estava disponible a Boost i diversos distribuïdors de compiladors/bibliotecaris van implementar tots o alguns dels components. TR1 no és la llista completa d'addicions a la biblioteca que va aparèixer a C++11. Per exemple, C++11 inclou una biblioteca de suport de fil que no està disponible a TR1.
Els nous components es van definir a l'espai de noms std::tr1 per distingir-los de la biblioteca estàndard actual.

## Components

TR1 inclou els components següents:

### Utilitats generals

Embolcall de referència: permet passar referències, en lloc de còpies, a algorismes o objectes de funció. La funció es basava en Boost. Ref. S'obté una referència d'embolcall a partir d'una instància de la classe de plantilla reference_wrapper. Les referències d'embolcall són similars a les referències normals ('&') del llenguatge C++. Per obtenir una referència d'embolcall de qualsevol objecte s'utilitza la ref de classe de plantilla (per a una referència constant s'utilitza cref ).
Les referències d'embolcall són útils sobretot per a les funcions de plantilla, quan la deducció d'arguments no dedueix una referència (per exemple, quan s'envia arguments):
Apuntadors intel·ligents : afegeix diverses classes que simplifiquen la gestió de la vida útil dels objectes en casos complexos. S'afegeixen tres classes principals:
* shared_ptr : un punter intel·ligent comptat per referència
* weak_ptr : una variant de shared_ptr que no augmenta el recompte de referències
La proposta es basa en la biblioteca Boost Smart Pointer.
Objectes de funció
Aquests quatre mòduls s'afegeixen al fitxer de capçalera <functional> :
Embolcall de funcions polimòrfiques (function ): pot emmagatzemar qualsevol funció cridable (punters de funció, punters de funció membre i objectes de funció) que utilitzi una signatura de trucada de funció especificada. El tipus no depèn del tipus de trucable utilitzat. Basat en Boost. Funció
Enquadernadors d'objectes de funció (bind ): poden vincular qualsevol paràmetre de paràmetre a objectes de funció. També es permet la composició de funcions. Aquesta és una versió generalitzada de les funcions d'enllaç estàndard std::bind1st i std::bind2nd. La funció es basa en la biblioteca Boost Bind.
Tipus de retorn de funció (result_of ): determina el tipus d'expressió de crida.
Funcions dels membres (mem_fn ): millora dels estàndards std::mem_fun i std::mem_fun_ref. Permet tractar els punters a funcions membre com a objectes de funció. Basat en la biblioteca Boost Mem Fn.

## Referències

* ↑ «ref - 1.72.0» (en anglès). www.boost.org.
* ↑ «Boost.SmartPtr: The Smart Pointer Library - 1.72.0» (en anglès). www.boost.org.
* ↑ «Chapter 16. Boost.Function - 1.72.0». www.boost.org.
* ↑ «Chapter 1. Boost.Bind - 1.72.0» (en anglès). www.boost.org.
* ↑ «Chapter 1. Boost.Member Function - 1.72.0» (en anglès). www.boost.org.