Narzędzia użytkownika

Narzędzia witryny


tuple

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
tuple [2008/04/01 14:55]
zegadlor
tuple [2008/04/01 16:08]
zegadlor
Linia 39: Linia 39:
 boost::​make_tuple(10,​ "Moja krotka",​ 10.5); ​ //Tworzy krotkę na podstawie dedukcji typów boost::​make_tuple(10,​ "Moja krotka",​ 10.5); ​ //Tworzy krotkę na podstawie dedukcji typów
 </​code>​ </​code>​
- + 
 +=====Wiązanie samodzielnych elementów w krotki===== 
 +Ciekawym mechanizmem biblioteki Tuples jest możliwość wiązania pojedynczych wartości w krotki. Służy do tego szablon funkcji tie. Elementy krotki utworzonej przez tie są modyfikowalnymi referencjami odpowiednich wartości. 
 +<code cpp> 
 +int i; char c; double d; 
 +boost::​tie(i,​ c, d) = make_tuple(1,'​a',​ 5.5);  //​Powiązanie pojedynczych wartości w krotkę 
 +std::cout << i << " " << ​ c << " " << d;  //Wynik to 1 a 5.5 
 +</​code>​ 
 +Powyższy przykład prezentuje jedno z ważnych zastosowań krotek - możemy je wykorzystywać do zwracania wielu wartości z funkcji. 
 + 
 +Jeśli w przypisaniu chcemy pominąć którąś pozycję krotki używamy obiektu ignore. Poniższy przykład pokazuje, że funkcja tie współpracuje także z obiektami klasy pair z biblioteki standardowej. 
 +<code cpp> 
 +int i; 
 +/* Zmień wartość tylko i. Wartość krotki pod indeksem 0 jest ignorowana. */ 
 +boost::​tie(boost::​tuples::​ignore,​ i) = std::​make_pair("​Krotka",​ 1); 
 +</​code>​ 
 +Moglibyśmy po prostu pominąć wartość pod indeksem 0. Jawne ignorowanie może być jednak pomocne dla kogoś, kto w przyszłości będzie edytował nasz kod. W ten sposób od razu widać, że wartość nie jest pominięta przez przypadek. 
 =====Dostęp do elementów krotki===== =====Dostęp do elementów krotki=====
 Dostęp do elementów krotek możliwy jest dzięki metodzie get klasy tuple lub zewnętrznej wobec klasy funkcji get. Obie wymagają konkretyzacji indeksem elementu (oczywiście liczonym od zera). Obie też zwracają referencję do obiektu znajdującego się pod podanym indeksem. Dostęp do elementów krotek możliwy jest dzięki metodzie get klasy tuple lub zewnętrznej wobec klasy funkcji get. Obie wymagają konkretyzacji indeksem elementu (oczywiście liczonym od zera). Obie też zwracają referencję do obiektu znajdującego się pod podanym indeksem.
Linia 123: Linia 140:
  
  
 +=====Ciekawostki=====
  
- +===przestrzeń nazw boost::​tuples=== 
- +W powyższych przykładach zawsze poprzedzaliśmy funkcje z biblioteki kwalifikatorem nazw boost lub boost::​tuples. Uzyskiwaliśmy w ten sposób dostęp do funkcji z następującej hierarchii przestrzeni nazw. 
- +<code cpp> 
- +namespace boost 
- +{ 
- +  ​namespace tuples 
- +  { 
- +    //​Pełny kod biblioteki 
- +  } 
-=====Ciekawostki=====+   
 +  //Funkcje dostępne bezpośrednio z przestrzeni nazw boost 
 +  using tuples::​tuple;​  
 +  using tuples::​make_tuple;​ 
 +  using tuples::​tie;​ 
 +  using tuples::​get;​ 
 +
 +</​code>​
  
 ===make_tuple i dedukcja typów=== ===make_tuple i dedukcja typów===
Linia 189: Linia 214:
 } }
 </​code>​ </​code>​
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
-Użycie zewnętrznej funkcji zamiast metody klasy uzależnia nasz kod od konkretnych nazw obiektów co może być niepożądane w rozwiązaniach uogólnionych. 
- 
tuple.txt · ostatnio zmienione: 2008/04/13 11:19 przez zegadlor