Informe tècnic 1 de C++
Tipus | edició d'estàndard ISO |
---|---|
Versió inicial | 2007 |
Característiques tècniques | |
Plataforma | C standard library |
← C++03 C++11 → |
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.[1] 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):
#include <iostream>
#include <tr1/functional>
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 >' is instantiated
std::cout << i << "\n"; // Output: 0
g( f, std::tr1::ref(i) ); // 'g< void(int &r), reference_wrapper<int> >' is instanced
std::cout << i << "\n"; // Output: 1
}
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ènciaweak_ptr
: una variant deshared_ptr
que no augmenta el recompte de referències
La proposta es basa en la biblioteca Boost Smart Pointer.[2]
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ó [3]
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.[4]
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.[5]
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.