To jest stara wersja strony!
Biblioteka Boost Format dostarcza klasę do formatowania argumentów zgodnie z dostarczonym łańcuchem formatującym. Podstawowe różnice w stosunku do funkcji printf, to m.in.:
Aby skorzystać z biblioteki Boost Format należy przede wszystkim dołączyć nagłówek boost/format.hpp. Nagłówek ten dostarcza nam do użycia klasę boost::format posiadającą cztery konstruktory:
format(const charT* str); format(const charT* str, const std::locale & loc); format(const string_t& s); format(const string_t& s, const std::locale & loc);
Myślę, że komentarz tutaj jest zbędny. Jako pierwszy argument przekazujemy oczywiście łańcuch formatujący. Oto kilka najprostszych przykładów użycia:
#include <iostream> #include <boost/format.hpp> // (...) boost::format frm("Abc %1% %2% %3% %4% cbA"); // Tworzymy nowy obiekt frm % "A"; // Przypisujemy pierwszy argument frm % "B" % "C" % "D"; // Kolejne argumenty przypisujemy za jednym zamachem std::cout << frm << std::endl; // --> "Abc A B C D cbA"
Wszystkie operacje możemy oczywiście wykonać w jednej linii. Liczba argumentów przekazywanych do obiektu jest dowolna, a każdy argument może wystąpić w przekazywanym łańcuchu dowolną ilość razy.
std::cout << boost::format("%1% %2% %1%") % "A" % "B" << std::endl; // --> "A B A"
Sformatowany string możemy także pobrać do zmiennej:
std::string s = frm.str(); // Odpowiednia liczba argumentów musi być uprzednio przekazana do obiektu std::string s2 = boost::str(frm);
Tego samego obiektu format możemy użyć ile razy chcemy, dostarczając nowego zestawu argumentów.
boost::format frm("%% _%1%_ _%2%_ _%3%_ %%"); // Podwójne użycie znaku specjalnego % spowoduje jego wypisanie na ekran frm % "A" % 2.32 % 10; std::cout << frm << std::endl; // --> "% _A_ _2.32_ _10_ %" frm % "Foo" % 2 % "Bar"; std::cout << frm << std::endl; // --> "% _Foo_ _2_ _Bar_ %"
Na wstępie należałoby zaznaczyć, że argumenty w łańcuchu formatującym mogą być definiowane na trzy różne sposoby:
%spec
%|spec|
z nawiasami użytymi w celu dopuszczenia parametry type-char
jako opcjonalny%N%
- prosty, przejrzysty sposób bez żadnego formatowania.gdzie spec ma następującą składnie:
[ N$ ] [ flags ] [ width ] [ .precision ] type-char
Argumenty ujęte w nawiasy kwadratowe są opcjonalne, a dla typu drugiego (%|spec|) również type-char
.
Znaczenie poszczególnych parametrów:
width
0x
dla heksadecymalnych) oraz przecinek oddzielający część dziesiętnąPrzykłady użycia poszczególnych formatowań pokazane są w poniższym kodzie:
//TODO
W jednym łańcuchu możemy korzystać z różnych sposóbów, natomiast błędem jest użycie zarówno argumentów numerowanych, jak i nienumerowanych.
std::cout << boost::format("%d %s") % 10 % "foo" << std::endl; // OK std::cout << boost::format("%1$s %2$s") % "foo" % "bar" << std::endl; // OK std::cout << boost::format("%1$d %s") % 10 % "bar" << std::endl; // BŁĄD!