Ketika saya menemukannya, boost::lexical_cast
saya berpikir "mengapa saya tidak tahu tentang ini lebih awal!" - Aku benci harus menulis kode seperti
stringstream ss;
ss << anIntVal;
mystring = ss.str();
Sekarang saya menulis
mystring = boost::lexical_cast<string>(anIntVal);
Kemarin, di stackoverflow, saya menemukan boost split (permata lain yang akan menyelamatkan saya untuk menulis kode).
string stringtobesplit = "AA/BB-CC")
vector<string> tokens;
boost::split(tokens, stringtobesplit, boost::is_any_of("/-"));
// tokens now holds 3 items: AA BB CC
Saya akan mulai melihat-lihat dokumentasi boost untuk mencari fungsi lain yang dapat saya gunakan secara teratur, tetapi saya rasa akan sangat mudah untuk melewatkan banyak hal.
Fungsi pendorong apa yang paling Anda gunakan / tidak suka jika tidak dimiliki?
Jawaban:
Mungkin bagian dari boost yang paling sering saya gunakan adalah boost :: shared_ptr .
sumber
std::shared_ptr
danstd::unique_ptr
.BOOST_FOREACH membuat hidup lebih berharga.
(Mengapa tidak ada yang menyebutkan ini? Pertanyaannya diajukan 8 bulan yang lalu!)
sumber
Favorit saya, tanpa urutan tertentu:
Boost adalah bantuan besar ketika saya menulis aplikasi lintas platform pertama saya - tanpanya saya benar-benar akan kesulitan.
sumber
Saya suka bagaimana Anda dapat menyediakan destruktor Anda sendiri
shared_ptr
.Artinya, misalnya, Anda dapat menggunakannya dengan
FILE*
dan menutup file untuk Anda.misalnya
sumber
NULL
tidak berguna, karena menetapkan parameter fungsi lokal. :)Tidak ada yang menyebutkan Multi-Index Containers jadi saya akan berpadu terlambat. Anda tidak terlalu sering membutuhkannya, tetapi tanpa peningkatan akan sangat merepotkan untuk membuat struktur data yang setara, serta menjadi kurang efisien. Saya telah banyak menggunakannya baru-baru ini untuk membuat wadah yang mencari 2 kunci.
sumber
Saya terkejut bahwa tidak ada yang menyebutkan
boost::optional
. Saya mendapati diri saya menggunakannya lebih sering daripada bagian Boost mana pun kecualishared_ptr
danscoped_ptr
.sumber
std::experimental::optional
dan segera (C ++ 17?) Sebagaistd::optional
.Tidak ada yang menyebutkan boost :: tuple? Karena malu!
sumber
std::tuple
.BOOST_STATIC_ASSERT
Pembaruan (Oktober 2011): C ++ 11 (C ++ 0x) memiliki
static_assert
http://www2.research.att.com/~bs/C++0xFAQ.html#static_assertsumber
Salah satu yang paling sering saya gunakan tidak di Boost, tetapi Adobe Source Libraries (ASL) dibangun di atas Boost - khususnya, ekstensi ke algoritme standar yang menerima boost :: range sebagai pengganti iterator start / end yang terpisah. Lalu, alih-alih menelepon, katakan,
Saya hanya bisa mengatakan
(Saya berharap bagian ASL ini bermigrasi ke Boost pada akhirnya.)
sumber
Saya banyak menggunakan:
Lainnya seperti Tuple, Static Assert dan Integer sangat berguna jika Anda menulis perpustakaan yang akan digunakan pada berbagai platform.
Hal-hal seperti Grafik dan Lambda lebih spesifik.
sumber
boost::shared_ptr
adalah persyaratan untuk pemrograman C ++ modern IMHO. Itu sebabnya mereka menambahkannya ke standar dengan TR1.boost::program_options
,,boost::bind
danboost::signal
sangat baik jika Anda tahu kegunaannya dan cara menggunakannya. Dua yang terakhir cenderung menakut-nakuti pendatang baru.sumber
Kami menemukan boost :: spirit cukup berguna untuk solusi bisnis untuk mengurai ECMAScript. Kompleks, tapi sangat bagus!
sumber
Saya terkejut belum melihat di antara jawaban Boost.Thread .
sumber
std::thread
.Saya telah menggunakan shared_ptr selama bertahun-tahun sekarang. Itu sangat berguna, tidak ada alasan sebuah proyek harus tanpa itu.
Selain itu, saya juga menggunakan Bind / Function / Lambda untuk mekanisme callback umum - terutama berguna saat menguji - serta Format untuk penggantian sprintf tujuan umum saya.
Akhirnya, hanya beberapa hari yang lalu ketika saya menggunakan Variant in angry untuk memecahkan masalah (parser yang dapat merespon dengan set kecil tipe token yang tidak berhubungan). Solusinya sangat elegan, dan saya sangat senang dengannya.
Tahun telah berlalu dan waktu telah berubah, jadi waktu untuk pembaruan. SharedPtr dan Function sekarang menjadi bagian dari Standard, dan Bind serta Lambda ditinggalkan oleh fungsi lambda tingkat bahasa yang sebenarnya.
Saya masih menggunakan Varian (yang juga telah distandarisasi, tetapi saya belum sampai ke sana), Format sebagian besar digantikan oleh fmtlib (yang juga telah distandarisasi).
Bagian besar Boost yang saya gunakan adalah Boost.Asio. Yang sedang dalam proses distandarisasi.
sumber
Menggunakan tupel untuk mengulang peta, seperti ini:
Dengan menggunakan boost assign, saya bisa menginisialisasi peta seperti ini:
Dan dengan menggunakan adaptor jangkauan dan operator pipa ("|"), saya dapat mengulangi nilai peta (sebagai contoh):
sumber
Anda harus memeriksa boost :: program_options. Itu membuat penguraian baris perintah lebih mudah.
sumber
Saya menggunakan Boost Pointer Containers sebagai preferensi ke wadah STL
shared_ptr
s.sumber
Saya cukup sedikit menggunakan boost :: numeric :: ublas :: matrix .
sumber
Saya suka boost :: random dan boost :: asio dan boost :: filesystem, namun boost :: bind, boost :: circular_buffer dan boost :: thread sangat praktis, petunjuk cerdas tidak masalah tetapi saya lebih suka RAII daripada sebagai manajemen memori
sumber
Oke, ini yang baru saya temukan:
Alih-alih menggunakan stricmp saya bisa menggunakan fungsi sama dengan boost dan meneruskan predikat is_iequal
misalnya:
daripada
Saya bisa menggunakan
diberikan:
sumber
Ini dua sen saya:
sumber
Saya menggunakan
boost::icl
cukup banyak untuk pemrosesan pasca teks. Menghemat cukup banyak waktu bagi saya karena jika tidak, saya sendiri harus menerapkan pemisahan teks ...BOOST_FOREACH
ada di mana-mana di kode saya :)boost::function
danboost::bind
merupakan keharusan mutlak. Meskipun sekarang merekastd::function
danstd::bind
. Ini benar-benar membantu mengurangi jumlah kode yang tidak perlu dan umumnya bagus untuk desain saya (atau delusi saya).Saya baru saja mulai menggunakan
boost::interprocess::message_queue
dan ini adalah alat yang hebat juga.Saya akan menggunakan lebih banyak, tetapi Qt memiliki cara asli untuk melakukan banyak hal yang dilakukan Boost. Jika saya harus memprogram C ++ murni, saya rasa saya akan menjadi
boost::junkie
:)sumber
Yang paling sering saya gunakan sekarang tersedia di TR1:
Sekarang saya juga menggunakan kelas biliar dan beberapa hal lain yang lebih spesifik.
Anda sekarang mengerti bahwa Boost dimaksudkan untuk berguna bagi sebagian besar pemrogram, itulah mengapa ini menjadi tempat pengujian untuk pustaka standar masa depan.
sumber
Berbicara tentang boost :: lexical_cast, mengapa tidak ada sesuatu seperti 'format' menjadi anggota statis di pustaka std :: string?
Hampir semua gui lib memiliki sesuatu seperti CString :: Format ("% i") atau QString :: Number ("% i") yang mengembalikan string yang diinisialisasi.
sumber
std::string = boost::format("Hello, %1% %2%") % "world" % "!!!").str();
Saya pikir pertanyaannya harus dibalik. Bagian mana dari boost yang tidak ingin Anda gunakan?
Dalam pengalaman saya, cukup banyak semua itu menarik dan berguna di setiap domain masalah.
Anda harus meluangkan waktu untuk melihat-lihat dokumentasi pendorong untuk menemukan area yang mencakup minat Anda.
Satu pengecualian mungkin adalah
boost::numeric::ublas
yang melakukan tugasnya, tetapi Eigen melakukannya dengan sangat lebih baik.sumber