Kiedy odkryłem boost::lexical_cast
, pomyślałem sobie „dlaczego nie wiedziałem o tym wcześniej!” - Nienawidziłem pisania kodu
stringstream ss;
ss << anIntVal;
mystring = ss.str();
Teraz piszę
mystring = boost::lexical_cast<string>(anIntVal);
Wczoraj na stackoverflow natknąłem się na Boost Split (kolejny klejnot, który pozwoli mi zaoszczędzić na pisaniu kodu).
string stringtobesplit = "AA/BB-CC")
vector<string> tokens;
boost::split(tokens, stringtobesplit, boost::is_any_of("/-"));
// tokens now holds 3 items: AA BB CC
Zacznę przeglądać dokumentację doładowania, szukając innych funkcji, z których będę mógł regularnie korzystać, ale czuję, że bardzo łatwo będzie coś przeoczyć.
Jakich funkcji doładowania używasz najczęściej / których nie chciałbyś mieć?
Odpowiedzi:
Prawdopodobnie najczęściej używaną częścią boostu jest dla mnie boost :: shared_ptr .
źródło
std::shared_ptr
istd::unique_ptr
.BOOST_FOREACH sprawia, że życie znów jest warte zachodu .
(Dlaczego nikt o tym nie wspomniał? Pytanie zadano 8 miesięcy temu!)
źródło
Moje ulubione to, w przypadkowej kolejności:
Boost był ogromną pomocą, kiedy napisałem swoją pierwszą aplikację wieloplatformową - bez niej naprawdę miałbym problemy.
źródło
Podoba mi się, jak możesz dostarczyć własnego destruktora
shared_ptr
.Oznacza to na przykład, że możesz go użyć z
FILE*
i zmusić do zamknięcia pliku.na przykład
źródło
NULL
jest bezużyteczne, ponieważ przypisuje parametr funkcji lokalnej. :)Nikt nie wspomniał o kontenerach z wieloma indeksami, więc zadzwonię późno. Nie jest tak często, że ich potrzebujesz, ale bez wzmocnienia tworzenie równoważnej struktury danych jest bardzo trudne, a także mniej wydajne. Ostatnio często ich używałem do tworzenia kontenerów, które wyszukują 2 klucze.
źródło
Dziwię się, że nikt o tym nie wspomniał
boost::optional
. Używam go częściej niż jakiejkolwiek części Boost, z wyjątkiemshared_ptr
iscoped_ptr
.źródło
std::experimental::optional
i wkrótce (C ++ 17?) Jakostd::optional
.Nikt nie wspomina o boostie :: tuple? Wstyd!
źródło
std::tuple
.BOOST_STATIC_ASSERT
Aktualizacja (październik 2011): C ++ 11 (C ++ 0x) ma
static_assert
http://www2.research.att.com/~bs/C++0xFAQ.html#static_assertźródło
Jednym z najczęściej używanych przeze mnie nie jest poprawne Boost, ale Adobe Source Libraries (ASL) zbudowane na bazie Boost - w szczególności rozszerzenia standardowych algorytmów, które akceptują wzmocnienie :: range zamiast oddzielnych iteratorów początku / końca. Wtedy zamiast dzwonić, powiedz:
Mogę po prostu powiedzieć
(Mam nadzieję, że te części ASL w końcu przejdą na Boost.)
źródło
Używam dużo:
Inne, takie jak Tuple, Static Assert i Integer, są bardzo przydatne, jeśli piszesz bibliotekę, która ma być używana na różnych platformach.
Rzeczy takie jak wykresy i Lambda są bardziej szczegółowe.
źródło
boost::shared_ptr
jest wymogiem dla nowoczesnego programowania IMHO w C ++. Dlatego dodali go do standardu z TR1.boost::program_options
,boost::bind
iboost::signal
są naprawdę fajne, jeśli wiesz, do czego służą i jak ich używać. Dwie ostatnie mają jednak tendencję do straszenia nowoprzybyłych.źródło
Okazało się, że funkcja boost :: spirit jest całkiem przydatna w rozwiązaniu biznesowym do analizowania ECMAScript. Złożone, ale bardzo ładne!
źródło
Jestem zaskoczony, że nie widzę jeszcze odpowiedzi między odpowiedziami Boost.Thread .
źródło
std::thread
.Używam shared_ptr od lat. Jest po prostu tak przydatny, że nie ma powodu, aby projekt był bez niego.
Co więcej, używam również Bind / Function / Lambda do ogólnych mechanizmów wywołania zwrotnego - szczególnie przydatnego podczas testowania - a także Format do mojego zamiennika sprintf ogólnego przeznaczenia.
Wreszcie, dopiero niedawno użyłem Variant w złości, aby rozwiązać problem (parser, który mógł odpowiedzieć za pomocą małego, ustalonego zestawu niepowiązanych typów tokenów). Rozwiązanie było bardzo eleganckie i jestem z niego bardzo zadowolony.
Minęły lata i czasy się zmieniły, więc czas na aktualizację. SharedPtr i Function są teraz częścią standardu, a Bind i Lambda są przestarzałe przez rzeczywistą funkcjonalność lambda na poziomie języka.
Nadal używam Variant (który również został ustandaryzowany, ale jeszcze tam nie jestem), format jest w dużej mierze zastępowany przez fmtlib (który również został ustandaryzowany).
Duża część Boost, której używam, to Boost.Asio. Który jest w trakcie standaryzacji.
źródło
Używanie krotek do iteracji mapy, na przykład:
Korzystając z przypisania doładowania, mogę zainicjować mapę w następujący sposób:
Używając adapterów zakresu i operatora potoku („|”) mogę iterować wstecz po wartościach mapy (jako przykład):
źródło
Powinieneś sprawdzić boost :: program_options. To znacznie ułatwia analizowanie wiersza poleceń.
źródło
Używam kontenerów Boost Pointer Containers zamiast kontenera STL
shared_ptr
s.źródło
Często używam boost :: numeric :: ublas :: matrix .
źródło
Uwielbiam boost :: random i boost :: asio i boost :: filesystem, jednak boost :: bind, boost :: round_buffer i boost :: thread są bardzo praktyczne, inteligentne wskaźniki są w porządku, ale wolę RAII zamiast zarządzania pamięcią
źródło
Okay, oto nowy, który znalazłem:
Zamiast używać stricmp mogę użyć funkcji equals boost i przekazać w predykacie is_iequal,
np .:
zamiast
mogę użyć
dany:
źródło
Oto moje dwa centy:
źródło
Używam
boost::icl
dużo do przetwarzania tekstu. Zaoszczędziło mi to sporo czasu, bo inaczej musiałbym sam zaimplementować dzielenie tekstu ...BOOST_FOREACH
jest wszędzie w moim kodzie :)boost::function
iboost::bind
są absolutną koniecznością. Chociaż teraz sąstd::function
istd::bind
. To naprawdę pomaga zmniejszyć ilość niepotrzebnego kodu i ogólnie jest dobre dla moich projektów (lub moich złudzeń).Niedawno zacząłem używać
boost::interprocess::message_queue
i jest to również świetne narzędzie.Używałbym znacznie więcej, ale Qt ma natywne sposoby robienia wielu rzeczy, które robi Boost. Gdybym kiedykolwiek musiał programować w czystym C ++, myślę, że zostałbym
boost::junkie
:)źródło
To, czego używam najczęściej, jest teraz dostępne w TR1:
Teraz używam również zajęć z puli i kilku innych bardziej szczegółowych rzeczy.
Rozumiesz teraz, że Boost ma być przydatny dla większości programistów, dlatego jest polem testowym dla przyszłej biblioteki standardowej.
źródło
Mówiąc o boost :: lexical_cast, dlaczego coś takiego jak „format” nie jest statycznym składnikiem w bibliotece std :: string?
Prawie wszystkie biblioteki gui mają coś takiego jak CString :: Format ("% i") lub QString :: Number ("% i"), które zwracają zainicjowany ciąg.
źródło
std::string = boost::format("Hello, %1% %2%") % "world" % "!!!").str();
Myślę, że pytanie powinno zostać odwrócone. Której części twojego boostu nie chciałbyś używać?
Z mojego doświadczenia wynika, że prawie wszystko jest interesujące i przydatne w każdej problematycznej domenie.
Powinieneś poświęcić czas na rozejrzenie się po dokumentacji doładowania, aby znaleźć obszary, które obejmują twoje zainteresowania.
Jedynym wyjątkiem może być
boost::numeric::ublas
to, że spełnia swoje zadanie, ale Eigen robi to znacznie lepiej.źródło