Informe tècnic 1 de C++

De la Viquipèdia, l'enciclopèdia lliure
Informe tècnic 1 de C++

Tipusedició d'estàndard ISO Modifica el valor a Wikidata
Versió inicial2007 Modifica el valor a Wikidata
Característiques tècniques
PlataformaC standard library

C++03 Modifica el valor a Wikidata
C++11 Modifica el valor a Wikidata

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[modifica]

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[modifica]

TR1 inclou els components següents:

Utilitats generals[modifica]

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è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.[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[modifica]

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