111

Khi tôi phát hiện ra boost::lexical_casttôi đã nghĩ "tại sao tôi không biết về điều này sớm hơn!" - Tôi ghét phải viết mã như

stringstream ss;
ss << anIntVal;
mystring = ss.str();

Bây giờ tôi viết

mystring = boost::lexical_cast<string>(anIntVal);

Hôm qua, trên stackoverflow, tôi đã xem qua boost split (một loại đá quý khác sẽ giúp tôi tiết kiệm mã viết).

string stringtobesplit = "AA/BB-CC")
vector<string> tokens;

boost::split(tokens, stringtobesplit, boost::is_any_of("/-")); 
// tokens now holds 3 items: AA BB CC

Tôi sẽ bắt đầu xem qua tài liệu tăng cường tìm kiếm các chức năng khác mà tôi sẽ có thể sử dụng thường xuyên, nhưng tôi cảm thấy rằng nó sẽ rất dễ bỏ lỡ mọi thứ.

Những chức năng tăng nào bạn sử dụng nhiều nhất / ghét không có?

|
  • 1

    Không quan tâm, điều gì đã ngăn bạn viết chức năng "chuyển đổi số thành chuỗi" của riêng mình trước khi bạn sử dụng Boost? Tôi đã thấy sự trùng lặp và viết một mẫu đơn giản và sử dụng nó và sau đó, có lẽ, đã chuyển sang phiên bản boost khi tôi tìm thấy nó ...

    – Hoàng Tân Ðịnh 09:35:00 29/11/2008
  • 4

    Xin chào Len, vào những thời điểm khác nhau trên các dự án khác nhau, tôi đã viết một hàm "ToStr", nhưng sau đó tôi sẽ chuyển sang một dự án khác, sau đó kết thúc việc viết 3-liner vì tôi chỉ muốn thực hiện công việc ngu ngốc: - ) trái ngược với chi phí tạo tập tin "misc_funcs"

    – Bùi Bích Quân 19:31:04 29/11/2008
61

Có lẽ phần được sử dụng nhiều nhất cho boostboost :: shared_ptr .

|
48

BOOST_FOREACH làm cho cuộc sống trở nên đáng giá một lần nữa.

(Tại sao không ai đề cập đến điều này? Câu hỏi đã được hỏi 8 tháng trước!)

|
33

Faves của tôi là, không theo thứ tự cụ thể:

  • regex
  • hệ thống tập tin
  • chủ đề
  • từ vựng
  • chương trình_options (chỉ xuất sắc!)
  • kiểm tra (cho tất cả các nhu cầu kiểm tra đơn vị của tôi).
  • Thuật toán chuỗi
  • Chuỗi mã thông báo
  • định dạng (định dạng chuỗi kiểu printf an toàn)
  • ptrs thông minh

Boost là một sự trợ giúp lớn khi tôi viết ứng dụng đa nền tảng đầu tiên của mình - nếu không có nó, tôi thực sự sẽ phải vật lộn.

|
27

Tôi thích cách bạn có thể cung cấp công cụ hủy diệt của riêng bạn cho shared_ptr.
Điều này có nghĩa là, ví dụ, bạn có thể sử dụng nó với FILE*và lấy nó để đóng tệp cho bạn.
ví dụ

void safeclose(FILE*fp) {
    if(fp) {
        fclose(fp);
    }
}
void some_fn() {
    boost::shared_ptr<FILE> fp( fopen(myfilename, "a+t"), safeclose );
    //body of the function, and when ever it exits the file gets closed
    fprintf( fp.get(), "a message\n" );
}
|
21

Không ai đã đề cập đến Container đa chỉ số nên tôi sẽ gọi điện muộn. Bạn không cần chúng thường xuyên, nhưng không tăng cường, đó là một nỗi đau thực sự để tạo ra một cấu trúc dữ liệu tương đương, cũng như kém hiệu quả hơn. Gần đây tôi đã sử dụng chúng rất nhiều để tạo ra các container tìm kiếm trên 2 phím.

|
20

Tôi ngạc nhiên khi không ai nhắc đến boost::optional. Tôi thấy mình sử dụng nó thường xuyên hơn bất kỳ phần nào của Boost ngoại trừ shared_ptrscoped_ptr.

|
  • 1

    Bây giờ có sẵn std::experimental::optionalvà sớm (C ++ 17?) Như std::optional.

    – Phan Thụy Lâm 00:12:22 25/03/2016
  • 1

    Yup, và tôi rất vui vì điều đó. :-) Mặc dù xem xét sự chậm trễ giữa các tiêu chuẩn và việc thực hiện đầy đủ chúng trong tất cả các trình biên dịch tôi sử dụng, vẫn sẽ mất một lúc trước khi tôi có thể phụ thuộc vào nó ... Tôi chỉ có thể bắt đầu sử dụng C ++ 11 trên một dự án vào năm ngoái. :-(

    – Trịnh Quỳnh Vân 13:32:01 26/03/2016
  • 1

    Trên thực tế tôi nghĩ rằng hầu hết các trình biên dịch đều đạt tiêu chuẩn đáp ứng wrt trong những năm gần đây - GCC và clang hỗ trợ C ++ 14 khi nó được phát hành, phải không? Dù sao, hãy xem xét việc tích hợp nhận xét của bạn vào câu trả lời của bạn.

    – Dương Kim Điệp 13:33:39 26/03/2016
  • 1

    @HeadGeek Thật thú vị khi thấy một bình luận mới được thêm vào câu trả lời của bạn sau 8 năm, và bạn đã trả lời!

    – Phạm Quốc Toản 06:33:45 12/06/2016
  • 1

    Wow ... tôi đoán nó đã được tám năm. Như chú ếch Kermit nói, thời gian thật thú vị khi bạn có ruồi. ;-)

    – Vũ Thu Hà 05:24:15 13/06/2016
19

Không ai đề cập đến boost :: tuple? Vì xấu hổ!

|
10

BOOST_STATIC_ASSERT

Cập nhật (tháng 10 năm 2011): C ++ 11 (C ++ 0x) có static_assert http://www2.research.att.com/~bs/C++0xFAQ.html#static_assert

|
  • 1

    BOOST_MPL_ASSERT_MSG cho phép rất dễ đọc / phát hiện các lỗi có nhiều thông tin hơn nhiều so với thông báo loại không đầy đủ sizeof mà BOOST_STATIC_ASSERT đưa ra.

    – Hoàng Bảo Dung 19:16:38 09/10/2009
  • 1

    ở đây ở đây! Tôi chỉ tìm thấy một trong những lỗi loại không hoàn chỉnh này trong macro thử nghiệm BOOST_CHECK_CLOSE - tôi mất nửa ngày để tìm hiểu điều gì đang xảy ra trước khi tôi xoay vòng mà tôi đã gọi nó bằng (int, int, float); một khi tôi bỏ các số nguyên đến dấu phẩy động thì lỗi sẽ biến mất. Nhưng những gì phải làm với một loại không hoàn chỉnh tôi thực sự không biết :)

    – Lý Trường Vũ 09:09:10 17/02/2010
9

Một trong những ứng dụng được sử dụng nhiều nhất của tôi không phải là Boost thích hợp, mà là Thư viện nguồn Adobe (ASL) được xây dựng dựa trên Boost - cụ thể là các phần mở rộng cho các thuật toán tiêu chuẩn chấp nhận phạm vi boost :: thay cho các trình lặp lặp / kết thúc riêng biệt. Sau đó, thay vì gọi, nói,

std::for_each(some_container.begin(), some_container.end(), do_something());

Tôi chỉ có thể nói

adobe::for_each(some_container, do_something());

(Tôi thực sự hy vọng những phần này của ASL sẽ chuyển sang Boost.)

|
7

Tôi ngạc nhiên khi chưa thấy giữa các câu trả lời Boost.Thread .

|
7

Chúng tôi thấy boost :: Spirit khá hữu ích cho một giải pháp kinh doanh để phân tích ECMAScript. Phức tạp, nhưng rất đẹp!

|
7

boost::shared_ptrlà một yêu cầu cho IMHO lập trình C ++ hiện đại. Đó là lý do tại sao họ đã thêm nó vào tiêu chuẩn với TR1. boost::program_options, boost::bindboost::signalthực sự tốt đẹp nếu bạn biết chúng dùng để làm gì và sử dụng chúng như thế nào. Hai người cuối cùng có xu hướng sợ người mới.

|
7

Tôi sử dụng rất nhiều:

  • tăng :: tín hiệu
  • boost :: shared_ptr
  • boost :: lexical_cast
  • tăng :: liên kết
  • tăng :: ngẫu nhiên
  • tăng :: chủ đề
  • boost :: không thể quét

Khác như Tuple, Tĩnh Assert và Integer rất hữu ích nếu bạn đang viết thư viện do được sử dụng trên nhiều nền tảng khác nhau.

Những thứ như Đồ thị và Lambda cụ thể hơn.

|
6

Tôi đã sử dụng shared_ptr trong nhiều năm nay. Nó rất hữu ích, không có lý do gì mà một dự án nên không có nó.

Trên hết, tôi cũng sử dụng Bind / Function / Lambda cho các cơ chế gọi lại chung - đặc biệt hữu ích khi thử nghiệm - cũng như Định dạng cho thay thế chạy nước rút cho mục đích chung của tôi.

Cuối cùng, đó chỉ là một ngày khác khi tôi sử dụng Biến thể trong sự tức giận để giải quyết vấn đề (một trình phân tích cú pháp có thể phản hồi với một tập hợp nhỏ các loại mã thông báo không liên quan cố định). Giải pháp rất thanh lịch và tôi rất hài lòng với nó.

|
  • 1

    Tôi đồng ý với tất cả những điều trên - ngoại trừ Lambda. Tôi đã sử dụng nó trong một thời gian, nhưng nó quanh co đến nỗi tôi đã từ bỏ nó vì tất cả những biểu hiện đơn giản nhất. Háo hức chờ đợi C ++ 0x và hình thức biểu thức lambda của nó.

    – Trịnh Lâm Tuyền 17:32:36 04/12/2008
  • 1

    Tôi đồng ý rằng Boost.Lambda có đầy đủ các loại cạm bẫy - ngay khi tôi bước vào vương quốc của Unlambda hoặc Protect, tôi từ bỏ và làm theo cách cũ, nhưng có vẻ cần thiết trong việc mở rộng các cuộc gọi lại theo bất kỳ cách nào nửa vời . Điều đó nói rằng, tôi cũng đang chờ triển khai C ++ 0x.

    – Hồ Vân Hà 15:14:40 26/02/2009
5

Tôi sử dụng Bộ chứa Con trỏ Tăng cường theo sở thích đối với bộ chứa STL của shared_ptrs.

|
5

Sử dụng bộ dữ liệu để lặp lại bản đồ, như thế này:

string key, value;
BOOST_FOREACH(tie(key, value), my_map) { ... }

Sử dụng boost gán, tôi có thể xác định bản đồ như thế này:

map<string, string> my_map = map_list_of("key1", "value1")("key2", "value2")("key3", "value3");

Và bằng cách sử dụng bộ điều hợp phạm vi và toán tử đường ống ("|"), tôi có thể lặp lại các giá trị của bản đồ (làm ví dụ):

BOOST_FOREACH(string value, my_multimap.equal_range("X") | map_values | reversed) { ... }
|
5

Bạn nên kiểm tra boost :: program_options. Nó làm cho phân tích dòng lệnh dễ dàng hơn nhiều.

|
4

Tôi sử dụng boost :: num :: ublas :: matrix khá nhiều.

|
3

Những gì tôi sử dụng nhiều nhất hiện có sẵn trong TR1:

  • con trỏ chia sẻ
  • lớp mảng

Bây giờ tôi cũng sử dụng các lớp pool và một số thứ cụ thể khác.

Bây giờ bạn đã hiểu rằng Boost có nghĩa là hữu ích cho hầu hết các lập trình viên, đó là lý do tại sao nó là giường thử nghiệm cho thư viện tiêu chuẩn trong tương lai.

|
3

Tôi sử dụng boost::iclkhá nhiều cho xử lý hậu kỳ văn bản. Tiết kiệm cho tôi khá nhiều thời gian vì nếu không tôi sẽ phải tự thực hiện phân tách văn bản ...

BOOST_FOREACH có ở khắp mọi nơi trong mã của tôi :)

boost::functionboost::bindlà một phải tuyệt đối. Mặc dù bây giờ họ đang std::functionstd::bind. Chúng thực sự giúp giảm số lượng mã không cần thiết và thường chỉ tốt cho các thiết kế của tôi (hoặc ảo tưởng của tôi).

Gần đây tôi đã bắt đầu sử dụng boost::interprocess::message_queuevà đây cũng là một công cụ tuyệt vời.

Tôi sẽ sử dụng nhiều hơn nữa, nhưng Qt có những cách riêng để làm rất nhiều việc mà Boost làm. Nếu tôi phải lập trình C ++ thuần túy, tôi đoán tôi sẽ trở thành một boost::junkie:)

|
3

Đây là hai xu của tôi:

  • boost :: scope_exit - không cần xác định lớp RAII chỉ cho một lần sử dụng
  • tăng :: bất kỳ
  • boost :: biến thể
  • Thư viện chứa con trỏ Boost (ptr_vector)
  • Thư viện hồ bơi Boost
  • boost :: unordered_map / boost :: unordered_set
|
3

Được rồi, đây là một cái mới mà tôi đã tìm thấy:
Thay vì sử dụng stricmp, tôi có thể sử dụng hàm bằng của boost và chuyển vào vị từ is_iequal,
ví dụ:
thay vì

stricmp( "avalue", mystr.c_str() ) == 0

tôi có thể sử dụng

equals( "avalue", mystr, is_iequal() ) 

được:

#include <boost/algorithm/string.hpp>
using namespace boost::algorithm;
|
3

Tôi thích boost :: Random và boost :: asio và boost :: filesystem, tuy nhiên boost :: bind, boost :: circle_buffer và boost :: thread rất thực tế, con trỏ thông minh vẫn ổn nhưng tôi thích RAII hơn là quản lý bộ nhớ

|
1

Nói về boost :: lexical_cast, tại sao không phải là 'định dạng' một thành viên tĩnh trong thư viện std :: string?
Hầu như tất cả các gui lib đều có một cái gì đó như CString :: Format ("% i") hoặc QString :: Number ("% i") trả về một chuỗi khởi tạo.

|
  • 1

    Kiểm tra định dạng oost :: của chúng tôi.

    – Hoàng Thanh Vinh 16:02:16 28/11/2008
  • 1

    ví dụ: std::string = boost::format("Hello, %1% %2%") % "world" % "!!!").str();

    – Lý Uyên Minh 16:04:25 28/11/2008
  • 1

    std :: chuỗi đã có 71 hàm quá nhiều (theo số lượng của Herb Sutter, không phải của tôi). Xem gotw.ca/gotw/084.htm để biết chi tiết: Tôi nghĩ rằng nó có đủ thông tin để giải thích (a) tại sao định dạng không cần phải có trong std :: string và (b) tại sao nên viết thuật toán chung hơn thành viên lớp chức năng nào.

    – Tạ Trường Nhân 18:45:24 28/11/2008
  • 1

    Hay nói cách khác, "C ++ giống như một quốc gia nước ngoài: họ làm những điều khác biệt ở đó" ;-)

    – Hồ Viết Hùng 18:53:44 28/11/2008
  • 1

    Định dạng không phải là một phần của thư viện vì một trong những thách thức mà Stroustrup đặt ra khi anh thiết kế C ++ là xây dựng thư viện I / O được định dạng an toàn. Rõ ràng, kết quả là những gì bạn thấy với iostreams. Rõ ràng, không ai nghĩ đến việc nội suy vào thời điểm đó. Có lẽ ai đó muốn viết một định dạng, để làm cho những người theo chủ nghĩa truyền thống cảm thấy như ở nhà hơn?

    – Trịnh Minh Ðạt 05:17:15 05/03/2010

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.