Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Previous revision Next revision | Previous revision | ||
format [2008/04/16 23:07] piechot |
format [2008/04/16 23:50] (aktualna) piechot |
||
---|---|---|---|
Linia 1: | Linia 1: | ||
====== Biblioteka Boost Format ====== | ====== Biblioteka Boost Format ====== | ||
+ | --- //[[tpiechot@stud.elka.pw.edu.pl|Tomasz Piechota G1ISI]] 2008/04/16 23:44// | ||
+ | |||
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.: | 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.: | ||
* deterministyczne zachowanie, nawet w przypadku podania błędnych argumentów (generuje wyjątek lub ignoruje błąd, w zależności od ustawień). | * deterministyczne zachowanie, nawet w przypadku podania błędnych argumentów (generuje wyjątek lub ignoruje błąd, w zależności od ustawień). | ||
Linia 217: | Linia 219: | ||
- | ===== Ciekawe przykłady użycia ===== | ||
- | Poniżej prezentuję kilka ciekawszych przykładów użycia klasy ''boost::format'': | + | |
+ | |||
+ | |||
+ | ===== Przykład użycia ===== | ||
+ | Poniższy program wyświetla listę produktów w postaci sformatowanej tabeli | ||
<code cpp> | <code cpp> | ||
- | // wyświetlanie tabel tekstowych na podstawie listy obiektów | + | #include <iostream> |
+ | #include <boost/format.hpp> | ||
+ | #include <string> | ||
+ | #include <list> | ||
- | boost::format line("%|53T-|"); | + | using namespace std; |
- | boost::format data("| %1% %|21t|| %2% %|42t|| %3% %|53t||"); | + | using namespace boost; |
- | std::cout << line << std::endl; | + | class Produkt |
- | std::cout << data % "Imie" % "Nazwisko" % "123123123" << std::endl; | + | { |
- | std::cout << line << std::endl; | + | public: |
+ | Produkt(string n, int i, float c, float z) : nazwa(n), ilosc(i), cena(c), zmiana(z) { } | ||
+ | string nazwa; | ||
+ | int ilosc; | ||
+ | float cena; | ||
+ | float zmiana; | ||
+ | }; | ||
- | </code> | + | int main(int argc, char *argv[]) |
+ | { | ||
+ | // Lista obiektów | ||
+ | list<Produkt> p; | ||
+ | p.push_back(Produkt("Widelec", 4, 4.99f, 1.021f)); | ||
+ | p.push_back(Produkt("Łopatka", 32, 2.99f, -10.2292f)); | ||
+ | p.push_back(Produkt("Packa", 19, 19.39f, 19.1133f)); | ||
- | --- //[[tpiechot@stud.elka.pw.edu.pl|Tomasz Piechota]] 2008/04/16 00:38// | + | |
+ | // pozioma linia | ||
+ | format line("%|55T-|"); | ||
+ | |||
+ | // nazwa: %|1$-.20s| - wyrownanie do lewej, maksimum 20 znakow | ||
+ | // ilość: %2% - bez dodatkowego formatowania | ||
+ | // cena: %|3$.2f| - liczba zmiennoprzecinkowa, do dwóch miejsc po przecinku | ||
+ | // zmiana: %|4$+10.4f| - wymuszenie wyświetlania znaku +, szerokosc 10, do 4 miejsc po przecinku, wyrównanie do prawej | ||
+ | format row("|%|1$-20.20s|%|21t||%2%%|32t||%|3$.2f|%|43t||%|4$+10.4f|%|54t||"); | ||
+ | |||
+ | cout << line << endl; | ||
+ | cout << row % "Nazwa produktu" % "Ilosc" % "Cena" % "Zmiana (%)" << endl; | ||
+ | cout << line << endl; | ||
+ | |||
+ | for (list<Produkt>::const_iterator it = p.begin(); it != p.end(); it++) | ||
+ | cout << row % it->nazwa % it->ilosc % it->cena % it->zmiana << endl; | ||
+ | |||
+ | cout << line << endl; | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | |||
+ | </code> |