คำถามติดแท็ก boost

Boost เป็นชุดไลบรารีคุณภาพสูงจำนวนมากที่มีไว้สำหรับใช้ใน C ++ Boost เป็นบริการฟรีและมักถือเป็น "ไลบรารีมาตรฐานที่สอง"


11
ข้อดีของการใช้ไลบรารี C ++ Boost คืออะไร? [ปิด]
ตามที่กล่าวไว้ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ดังนั้นฉันได้อ่านและดูเหมือนว่าไลบรารี Boost จะถูกใช้บ่อยมากในทางปฏิบัติ (ไม่ใช่ที่ร้านของฉัน) ทำไมถึงเป็นแบบนี้? และอะไรที่ทำให้มันยอดเยี่ยมมาก?
123 c++  boost 


6
ตัวอย่างสำหรับ boost shared_mutex (การอ่านหลายครั้ง / การเขียนหนึ่งครั้ง)?
ฉันมีแอปมัลติเธรดที่ต้องอ่านข้อมูลบ่อยครั้งและมีการอัปเดตข้อมูลเป็นครั้งคราว ตอนนี้ mutex ช่วยให้เข้าถึงข้อมูลนั้นได้อย่างปลอดภัย แต่มีราคาแพงเพราะฉันต้องการให้หลายเธรดสามารถอ่านพร้อมกันได้และล็อคเฉพาะเมื่อจำเป็นต้องอัปเดตเท่านั้น (เธรดการอัปเดตอาจรอให้เธรดอื่นเสร็จสิ้น) . ฉันคิดว่านี่คือสิ่งที่boost::shared_mutexควรทำ แต่ฉันไม่ชัดเจนในการใช้งานและยังไม่พบตัวอย่างที่ชัดเจน ใครมีตัวอย่างง่ายๆที่ฉันสามารถใช้เริ่มต้นได้บ้าง?

25
ส่วนที่ใช้มากที่สุดของ Boost [ปิด]
ตามที่กล่าวไว้ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา เมื่อฉันค้นพบboost::lexical_castฉันก็คิดกับตัวเองว่า "ทำไมฉันไม่รู้เรื่องนี้เร็วกว่านี้!" - ฉันเกลียดการเขียนโค้ดแบบ stringstream ss; ss << anIntVal; mystring = ss.str(); ตอนนี้ฉันเขียน mystring = boost::lexical_cast<string>(anIntVal); เมื่อวานนี้ใน stackoverflow ฉันเจอการแยกการเพิ่มประสิทธิภาพ (อัญมณีอื่นที่จะช่วยฉันเขียนโค้ด) string stringtobesplit = "AA/BB-CC") vector<string> tokens; boost::split(tokens, stringtobesplit, boost::is_any_of("/-")); // tokens now holds 3 items: AA BB CC ฉันกำลังจะเริ่มดูเอกสารบูสต์โดยมองหาฟังก์ชั่นอื่น ๆ ที่ฉันจะสามารถใช้ได้เป็นประจำ แต่ฉันรู้สึกว่ามันจะพลาดง่ายมาก …
116 c++  boost 

2
ตัวอย่างที่ดีสำหรับ boost :: algorithm :: join
เมื่อเร็ว ๆ นี้ฉันต้องการใช้boost :: algorithm :: joinแต่ฉันไม่พบตัวอย่างการใช้งานใด ๆ และฉันไม่ต้องการเสียเวลามากมายในการเรียนรู้ไลบรารี Boost Range เพียงเพื่อใช้ฟังก์ชันนี้ ใครสามารถให้ตัวอย่างที่ดีในการใช้การเข้าร่วมในคอนเทนเนอร์ของสตริงได้หรือไม่? ขอบคุณ
116 c++  string  boost  join 

4
ความแตกต่างระหว่าง `const shared_ptr <T>` และ `shared_ptr <const T>`?
ฉันกำลังเขียนวิธีการเข้าถึงสำหรับตัวชี้ที่ใช้ร่วมกันใน C ++ ซึ่งมีลักษณะดังนี้: class Foo { public: return_type getBar() const { return m_bar; } private: boost::shared_ptr&lt;Bar&gt; m_bar; } ดังนั้นเพื่อรองรับ const-ness ของgetBar()ประเภทการส่งคืนควรเป็นสิ่งboost::shared_ptrที่ป้องกันการแก้ไขที่Barชี้ไป ฉันเดาว่าshared_ptr&lt;const Bar&gt;เป็นประเภทที่ฉันต้องการกลับไปทำเช่นนั้นในขณะที่const shared_ptr&lt;Bar&gt;จะป้องกันไม่ให้การกำหนดตัวชี้ซ้ำเพื่อชี้ไปยังตำแหน่งอื่นBarแต่อนุญาตให้แก้ไขสิ่งBarที่ชี้ไป ... อย่างไรก็ตามฉันไม่แน่ใจ ฉันจะขอบคุณมากถ้ามีคนที่รู้แน่ชัดสามารถยืนยันเรื่องนี้หรือแก้ไขฉันได้หากฉันเข้าใจผิด ขอบคุณ!
116 c++  boost  const  shared-ptr 

17
C ++ - ส่งต่อการอ้างอิงไปยัง std :: shared_ptr หรือ boost :: shared_ptr
ถ้าฉันมีฟังก์ชันที่ต้องทำงานร่วมกับ a shared_ptrมันจะไม่มีประสิทธิภาพมากกว่าที่จะส่งต่อการอ้างอิงไปยังมัน (เพื่อหลีกเลี่ยงการคัดลอกshared_ptrวัตถุ) ผลข้างเคียงที่ไม่ดีที่เป็นไปได้คืออะไร? ฉันนึกภาพสองกรณีที่เป็นไปได้: 1) ภายในฟังก์ชันมีสำเนาของอาร์กิวเมนต์เช่นใน ClassA::take_copy_of_sp(boost::shared_ptr&lt;foo&gt; &amp;sp) { ... m_sp_member=sp; //This will copy the object, incrementing refcount ... } 2) ภายในฟังก์ชันจะใช้อาร์กิวเมนต์เท่านั้นเช่นใน Class::only_work_with_sp(boost::shared_ptr&lt;foo&gt; &amp;sp) //Again, no copy here { ... sp-&gt;do_something(); ... } ฉันไม่เห็นเหตุผลที่ดีในทั้งสองกรณีที่จะส่งผ่านboost::shared_ptr&lt;foo&gt;ค่าโดยแทนที่จะเป็นการอ้างอิง การส่งผ่านตามค่าจะเพิ่มจำนวนอ้างอิง "ชั่วคราว" เนื่องจากการคัดลอกและลดลงเมื่อออกจากขอบเขตฟังก์ชัน ฉันมองข้ามบางสิ่งไปหรือเปล่า? เพียงเพื่อชี้แจงหลังจากอ่านคำตอบหลาย ๆ ข้อ: ฉันเห็นด้วยอย่างสมบูรณ์เกี่ยวกับข้อกังวลเกี่ยวกับการปรับให้เหมาะสมก่อนเวลาอันควรและฉันมักจะพยายามสร้างจุดเริ่มต้นจากนั้นทำงานบนฮอตสปอต คำถามของฉันมาจากมุมมองของโค้ดทางเทคนิคล้วนๆถ้าคุณรู้ว่าฉันหมายถึงอะไร

23
รับเส้นทางของปฏิบัติการ
ฉันรู้ว่ามีการถามคำถามนี้มาก่อน แต่ฉันยังไม่เห็นคำตอบที่น่าพอใจหรือมีคำว่า "ไม่ทำไม่ได้" ดังนั้นฉันจะถามอีกครั้ง! สิ่งที่ฉันต้องการทำคือรับพา ธ ไปยังไฟล์ปฏิบัติการที่กำลังทำงานอยู่ไม่ว่าจะเป็นพา ธ สัมบูรณ์หรือสัมพันธ์กับตำแหน่งที่เรียกใช้ไฟล์ปฏิบัติการในรูปแบบที่ไม่ขึ้นกับแพลตฟอร์ม ฉันแม้ว่า boost :: filesystem :: initial_path เป็นคำตอบสำหรับปัญหาของฉัน แต่ดูเหมือนว่าจะจัดการเฉพาะส่วนที่ 'ไม่ขึ้นกับแพลตฟอร์ม' ของคำถาม - มันยังคงส่งคืนเส้นทางที่แอปพลิเคชันถูกเรียกใช้ สำหรับพื้นหลังเล็กน้อยนี่เป็นเกมที่ใช้ Ogre ซึ่งฉันกำลังพยายามสร้างโปรไฟล์โดยใช้ Very Sleepy ซึ่งเรียกใช้เป้าหมายที่เรียกใช้งานได้จากไดเรกทอรีของตัวเองดังนั้นแน่นอนว่าเมื่อโหลดเกมจะไม่พบไฟล์การกำหนดค่า ฯลฯ และเกิดปัญหาทันที . ฉันต้องการที่จะส่งผ่านเส้นทางที่แน่นอนไปยังไฟล์กำหนดค่าซึ่งฉันรู้ว่าจะอยู่คู่กับไฟล์ปฏิบัติการเสมอ เช่นเดียวกับการดีบักใน Visual Studio - ฉันต้องการที่จะสามารถเรียกใช้ $ (TargetPath) โดยไม่ต้องตั้งค่าไดเร็กทอรีการทำงาน
115 c++  boost  executable 

6
วิธีเชื่อมโยงโปรแกรม C ++ กับ Boost โดยใช้ CMake
ไฟล์ CMake ของฉันควรมีลักษณะอย่างไรสำหรับการเชื่อมโยงโปรแกรมของฉันกับไลบรารี Boost ภายใต้ Ubuntu ข้อผิดพลาดที่แสดงระหว่างการทำงานmake: main.cpp:(.text+0x3b): undefined reference to `boost::program_options::options_description::m_default_line_length' ไฟล์หลักนั้นง่ายมาก: #include &lt;boost/program_options/options_description.hpp&gt; #include &lt;boost/program_options/option.hpp&gt; using namespace std; #include &lt;iostream&gt; namespace po = boost::program_options; int main(int argc, char** argv) { po::options_description desc("Allowed options"); desc.add_options() ("help", "produce help message") ; return 0; } ฉันจัดการไปแล้ว บรรทัดเดียวที่ฉันเพิ่มลงในไฟล์ CMake คือ: target_link_libraries( my_target_file …
109 c++  boost  cmake 

9
การอ้างอิงที่ไม่ได้กำหนดเพื่อ boost :: system :: system_category () เมื่อคอมไพล์
ฉันกำลังพยายามรวบรวมโปรแกรมบน Ubuntu 11.10 ที่ใช้ไลบรารี Boost ฉันมีไลบรารี Boost 1.46-dev จาก Ubuntu Repository ที่ติดตั้งไว้ แต่ฉันได้รับข้อผิดพลาดเมื่อรวบรวมโปรแกรม undefined reference to boost::system::system_category() ฉันทำอะไรผิด?
105 c++  boost 

7
ตัวเลขสุ่มถ่วงน้ำหนัก
ฉันกำลังพยายามใช้ตัวเลขสุ่มแบบถ่วงน้ำหนัก ตอนนี้ฉันแค่เอาหัวโขกกำแพงและคิดไม่ออก ในโครงการของฉัน (Hold'em hand-range, subjective all-in equity analysis) ฉันใช้ฟังก์ชันสุ่มของ Boost สมมติว่าฉันต้องการเลือกตัวเลขสุ่มระหว่าง 1 ถึง 3 (เช่น 1, 2 หรือ 3) เครื่องกำเนิดไฟฟ้า Twister mersenne ของ Boost ทำงานได้อย่างมีเสน่ห์สำหรับสิ่งนี้ อย่างไรก็ตามฉันต้องการให้ตัวเลือกถูกถ่วงน้ำหนักเช่นนี้: 1 (weight: 90) 2 (weight: 56) 3 (weight: 4) Boost มีฟังก์ชันบางอย่างสำหรับสิ่งนี้หรือไม่?
104 c++  boost  random 

2
boost :: flat_map และประสิทธิภาพเมื่อเทียบกับแผนที่และ unordered_map
เป็นความรู้ทั่วไปในการเขียนโปรแกรมว่าตำแหน่งหน่วยความจำช่วยเพิ่มประสิทธิภาพได้มากเนื่องจากแคชฮิต เมื่อเร็ว ๆ นี้ฉันได้ค้นพบเกี่ยวกับboost::flat_mapการใช้งานแผนที่แบบเวกเตอร์ ดูเหมือนจะไม่ได้รับความนิยมเท่าของคุณทั่วไปmap/ unordered_mapดังนั้นฉันจึงไม่สามารถหาการเปรียบเทียบประสิทธิภาพใด ๆ ได้ เปรียบเทียบอย่างไรและอะไรคือกรณีการใช้งานที่ดีที่สุดสำหรับมัน? ขอบคุณ!
103 c++  boost  map 

4
shared_ptr อยู่ที่ไหน
ตอนนี้ฉันรู้สึกหงุดหงิดมากหลังจากพยายามหาที่ตั้งของ shared_ptr อยู่หลายชั่วโมง ไม่มีตัวอย่างใดที่ฉันเห็นแสดงโค้ดที่สมบูรณ์เพื่อรวมส่วนหัวสำหรับshared_ptr(และใช้งานได้) เพียงแค่ระบุstd, tr1และ&lt;memory&gt;ไม่ได้ช่วยที่ทุกคน! ฉันดาวน์โหลดบูสต์แล้ว แต่ก็ยังไม่ปรากฏ! ใครช่วยบอกทีว่าหาได้ที่ไหน ขอบคุณที่ให้ฉันระบายความผิดหวัง! แก้ไข: ฉันเห็นว่าชื่อของฉันเปลี่ยนไป ขอโทษด้วยกับเรื่องนั้น. ดังนั้น ... มันยังเป็นเพราะฉันไม่ชัดเจนว่า shared_ptr "ขึ้นอยู่กับเวอร์ชัน C ++" -&gt; นั่นเป็นสาเหตุที่ฉันไม่ระบุสภาพแวดล้อมของฉัน -&gt; ดังนั้นจึงเป็นเรื่องยากสำหรับฉันที่จะค้นหามัน ฉันกำลังทำงานกับ MSVS2008 แก้ไข 2: ฉันไม่รู้ว่าทำไม แต่ฉันรวม [memory] และ [boost / tr1 / memory.hpp] และ [boost / tr1 / tr1 / memory] ในขณะที่มองหา shared_ptr ทุกที่ .. แน่นอนฉันทำไม่ได้ …

3
Downcasting shared_ptr <Base> เป็น shared_ptr <Derived>?
อัปเดต: shared_ptr ในตัวอย่างนี้เหมือนใน Boost แต่ไม่รองรับ shared_polymorphic_downcast (หรือ dynamic_pointer_cast หรือ static_pointer_cast สำหรับเรื่องนั้น)! ฉันพยายามเริ่มต้นตัวชี้ที่ใช้ร่วมกันไปยังคลาสที่ได้รับโดยไม่สูญเสียจำนวนอ้างอิง struct Base { }; struct Derived : public Base { }; shared_ptr&lt;Base&gt; base(new Base()); shared_ptr&lt;Derived&gt; derived; // error: invalid conversion from 'Base* const' to 'Derived*' derived = base; จนถึงตอนนี้ดีมาก ฉันไม่ได้คาดหวังว่า C ++ จะแปลง Base * เป็น Derived * …
103 c++  gcc  boost 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.