สองตัวอย่างของไลบรารีที่ใช้โครงสร้าง C ++ ที่ทันสมัย:
- ทั้งห้องสมุด eigen และตัวนิ่ม (พีชคณิตเชิงเส้น) ใช้โครงสร้าง C ++ ที่ทันสมัยหลายอย่าง ตัวอย่างเช่นพวกเขาใช้ทั้งเทมเพลตนิพจน์เพื่อทำให้นิพจน์ทางคณิตศาสตร์ลดความซับซ้อนและบางครั้งสามารถกำจัดบางส่วนชั่วคราวได้:
http://eigen.tuxfamily.org
http://arma.sourceforge.net/
http://hpac.rwth-aachen.de/teaching/sem-accg-14/Armadillo.pdf (การนำเสนอบนเทมเพลตนิพจน์ในอาร์มาดิลโล่)
- ไลบรารี CGAL (เรขาคณิตเชิงคำนวณ) ใช้คุณสมบัติ C ++ ที่ทันสมัยมากมาย (ใช้เทมเพลตและความเชี่ยวชาญเป็นพิเศษ):
http://www.cgal.org
บันทึก:
โครงสร้าง C ++ ที่ทันสมัยมีความสง่างามและสามารถใช้งานได้อย่างสนุกสนาน มันเป็นทั้งจุดแข็งและจุดอ่อน: เมื่อใช้มันจะเป็นการดึงดูดให้เพิ่มเลเยอร์เทมเพลต / ความเชี่ยวชาญ / แลมบ์ดาหลายเลเยอร์ซึ่งในท้ายที่สุดบางครั้งคุณจะได้รับ "การจัดการ" มากกว่าโค้ดที่มีประสิทธิภาพในโปรแกรม โปรแกรมของคุณ "พูดถึง" เกี่ยวกับปัญหามากกว่าการอธิบายวิธีแก้ปัญหา) การหาสมดุลที่เหมาะสมนั้นลึกซึ้งมาก สรุป: หนึ่งต้องติดตามวิวัฒนาการของอัตราส่วน "สัญญาณ / เสียง" ในรหัสโดยการวัด :
- มีโค้ดกี่บรรทัดในโปรแกรม?
- มีกี่คลาส / เทมเพลต
- ใช้เวลา?
- การใช้หน่วยความจำ?
ทุกอย่างที่เพิ่มขึ้นของคนสองคนแรกอาจจะถือว่าเป็นค่าใช้จ่าย (เพราะมันอาจจะทำให้โปรแกรมยากที่จะเข้าใจและเพื่อรักษา) ทุกอย่างที่ลดลงสองคนสุดท้ายคือกำไร
ยกตัวอย่างเช่นการแนะนำเป็นนามธรรม (ชั้นเสมือนหรือแม่แบบ) รหัสปัจจัยและสามารถทำให้โปรแกรมง่าย ( กำไร ) แต่ถ้ามันไม่เคย derivated / instanced เพียงครั้งเดียวแล้วก็แนะนำค่าใช้จ่ายที่ไม่เกี่ยวข้องกำไร (อีกครั้งมันเป็น บอบบางเพราะกำไรอาจมาในภายหลังในอนาคตวิวัฒนาการของโปรแกรมดังนั้นจึงไม่มี "กฎทอง")
ความสะดวกสบายของโปรแกรมเมอร์ยังเป็นปัจจัยสำคัญที่ต้องคำนึงถึงในราคา / กำไรที่ได้รับ: ด้วยเทมเพลตจำนวนมากเวลาในการรวบรวมอาจเพิ่มขึ้นอย่างมากและข้อความแสดงข้อผิดพลาดกลายเป็นเรื่องยากที่จะแยกวิเคราะห์
ดูสิ่งนี้ด้วย
ในระดับทั่วไปและการเขียนโปรแกรมเมตาโดยใช้เทมเพลต C ++ มีประโยชน์ในด้านวิทยาศาสตร์คอมพิวเตอร์อย่างไร