จะเริ่มเรียนรู้วิธีใช้ห้องสมุด Boost ได้ที่ไหน


16

เมื่อเร็ว ๆ นี้ Boost มีให้บริการในโครงการที่ฉันใช้งานอยู่และฉันก็ไม่มีประสบการณ์มากนัก ห้องสมุดมีหลายส่วนและคุณสมบัติที่ยากที่จะรู้ว่าจะเริ่มเรียนรู้ได้ที่ไหน - โดยเฉพาะอย่างยิ่งเมื่อฉันพยายามเรียนรู้ในขณะที่สร้างรหัสการผลิต

ฉันจะซาบซึ้งมากถ้ามีใครบางคนสามารถแสดงรายการคุณลักษณะ 3 ถึง 5 อย่างซึ่งมีประโยชน์มากโดยทั่วไปการเขียนโปรแกรมทุกวันและระบุว่าทำไมพวกเขาถึงมีประโยชน์ จากนั้นฉันก็สามารถเริ่มเรียนรู้และใช้มันอย่างน้อยมันก็จะทำให้ฉันตั้งหลักในห้องสมุดและเป็นสถานที่ที่เป็นมิตรในการเริ่มเรียนรู้ / ใช้มัน :)

ขอบคุณล่วงหน้า!


ฉันไม่เข้าใจวลี 'ตั้งหลักในห้องสมุด' ในบริบทนี้ เกิดอะไรขึ้นกับหนังสือ มีเรื่องไม่กี่เรื่องจากผู้ขายทั่วไปโดยให้พวกเขาอยู่ในชั้นวางหนังสือในทีมของคุณควรเป็นสิ่งที่จำเป็น
aquaherd

ฉันอ่านตลอดเวลาสำหรับการเขียนโปรแกรม - ฉันไม่มีเวลาอ่านหนังสือหรือคู่มืออ้างอิงเกี่ยวกับการเพิ่มกลับไปข้างหน้าเพื่อรู้ทุกอย่างที่มีและไม่ว่ามันจะมีประโยชน์หรือไม่ในนาทีนี้ ฉันต้องการเริ่มใช้ที่นี่และที่นั่นและค่อยๆหยิบมันขึ้นมาในขณะที่ทำงานและฉันต้องการตัวอย่างหลัก ๆ ขององค์ประกอบการเพิ่มประสิทธิภาพที่มีประโยชน์จริงๆ ตัวอย่างเช่น C ++ ที่มีประสิทธิภาพโดย Scott Meyers พูดถึง shared_ptr non stop (และอื่น ๆ น้อยมาก) เพราะมันดีมาก มีอะไรอีกที่เป็นประโยชน์ในการส่งเสริมอย่างผิดปกติ
John Humphreys - w00te

โดยส่วนตัวแล้วผมชอบมาโคร BOOST_FOREACH รูปแบบผู้สังเกตการณ์ / ผู้สมัครสมาชิกนิพจน์ทั่วไปตัวแยกวิเคราะห์วันที่ / เวลา (แง่มุม) แต่ฉันพบพวกมันโดยบังเอิญในขณะที่ปรับเปลี่ยนการเพิ่มที่มีอยู่โดยใช้รหัสหรือตามที่ระบุไว้ใน DeadMG ฉันมีรอยขีดข่วนเพียงปลายของภูเขาน้ำแข็งที่เพิ่ม แต่มันรู้สึกเหมือนความต่อเนื่องตามธรรมชาติของ STL
aquaherd

คำตอบ:


8

หากคุณกำลังใช้คอมไพเลอร์ก่อน TR1 แล้วพอยน์เตอร์อัจฉริยะ

boost::shared_ptr
boost::weak_ptr
boost::scoped_ptr 

boost::scoped_array
boost::shared_array

หากคอมไพเลอร์ของคุณมีพอยน์เตอร์อัจฉริยะใช้อยู่
เหตุผลก็คือ C ++ ที่ชัดเจนโดยไม่มีตัวชี้สมาร์ทไม่ใช่ C ++

ห้องสมุดเพิ่ม ptr_contaier

คอนเทนเนอร์ STL ทั้งหมดนำมาใช้ใหม่เพื่อเก็บพอยน์เตอร์ไว้โดยเฉพาะ ไม่เพียง แต่คอนเทนเนอร์จะเป็นเจ้าของพอยน์เตอร์เพื่อที่ว่าเมื่อคอนเทนเนอร์ถูกทำลายมันจะทำลายพอยน์เตอร์ทั้งหมดโดยอัตโนมัติ แต่ยังให้การเข้าถึงองค์ประกอบตามการอ้างอิงวัตถุปกติ (ไม่ใช่ตัวชี้) สิ่งนี้ทำให้ง่ายต่อการใช้วัตถุในอัลกอริธึมมาตรฐานโดยไม่ใช้ฟังก์ชั่น wrapper

ห้องสมุดแลมบ์ดาเพิ่ม (ดูความคิดเห็นด้านล่าง)

ฟังก์ชั่น STL และตัวยึดประสานตกลงสำหรับสิ่งง่าย ๆ แต่การเพิ่ม :: lambda ทำขั้นตอนต่อไปและทำให้สิ่งต่าง ๆ ง่ายขึ้นมากเมื่อใช้อัลกอริทึมมาตรฐาน

เพิ่ม :: ใด ๆ และเพิ่ม :: ตัวแปร

เมื่อคุณต้องการเก็บวัตถุโดยไม่ต้องการทราบประเภทที่แน่นอน

คอนเทนเนอร์ดัชนีหลายรายการ

ภาชนะที่อนุญาตให้เข้าถึงองค์ประกอบได้หลายวิธี
ไปเป็นวันที่คุณมีเวกเตอร์ของวัตถุและแผนที่แยกต่างหากสำหรับเวกเตอร์ค้นหาอย่างรวดเร็ว วิธีนี้จะช่วยลดความผิดพลาดที่คุณจำเป็นต้องเขียนเพื่อรักษาภาชนะทั้งสองเมื่อใส่ / ลบองค์ประกอบลงในภาชนะ

เพิ่ม :: lexical_cast

อาจเป็นประโยชน์น้อยที่สุดในชีวิตจริง แต่ความสนุกในการเล่นคือเพิ่ม :: lexical_cast มันจะแปลงวัตถุใด ๆ ให้เป็น / จากสตริง (ตราบเท่าที่ประเภทนั้นมีผู้ประกอบการ << และ >> ที่เหมาะสมกำหนดไว้) มีประโยชน์มากสำหรับการทิ้งข้อความแสดงข้อผิดพลาดเมื่อยกเลิกการบล็อก


1
Boost.Phoenixได้แทนที่ Boost.Lambda อย่างเป็นทางการซึ่งขณะนี้ถือว่าเลิกใช้แล้ว โปรดแนะนำตัวเก่าแทนที่จะเป็นตัวหลังสำหรับรหัสใหม่ : -]
ildjarn

16

Boost ไม่ใช่เฟรมเวิร์กหรือไลบรารี มันเป็นคอลเลกชันห้องสมุดที่ควบคุมโดยผู้ตรวจสอบคุณภาพ คุณไม่ได้เรียนรู้ Boost ห้องสมุดเป็นรายบุคคล - เมื่อคุณต้องการบางสิ่งคุณตรวจสอบเพื่อดูว่าอยู่ใน Boost หรือไม่ถ้าเป็นเช่นนั้นคุณจะได้เรียนรู้ห้องสมุดนั้น แค่นั้นแหละ. คุณไม่สามารถเข้าใจในการเพิ่ม :: ตัวเลือกจากการเข้าใจในการเพิ่ม :: ตัวแปร


4
คุณสามารถพูดได้ว่าการเพิ่มประสิทธิภาพนั้นเป็นป้ายกำกับคุณภาพและชุดการกระจาย
Klaim

1

Boost เป็นคอลเล็กชันของห้องสมุด ครั้งต่อไปที่คุณทำรหัสกะตะให้เลือกไลบรารีใน Boost ที่คุณคิดว่าอาจช่วยคุณและใช้งานได้ เอกสารเป็นสิ่งที่ดีมากและคุณไม่ควรมีปัญหาในการเลือกประเพณีง่าย ๆ สิ่งที่ซับซ้อนมากขึ้นจะเกิดขึ้นเมื่อคุณพยายามทำสิ่งที่ฉลาดขึ้น

ตัวอย่าง: เธรดเดี่ยวที่ปลอดภัยพร้อม boost :: thread call_once

ตัวอย่าง: อ่านไฟล์กำหนดค่าของคีย์: value using tokenizer

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