“ เทมเพลต C ++: คู่มือฉบับสมบูรณ์” (c) 2002 - รุ่นล่าสุดด้วย C ++ 11?


10

เทมเพลต C ++หนังสือ: คู่มือฉบับสมบูรณ์ , (c) 2002, ดูน่าสนใจสำหรับฉันมาก, แต่เนื่องจากอายุ 12 ปี, ฉันกังวลว่ามันอาจล้าสมัย มีบทวิจารณ์ของ Amazon ที่ได้รับความนิยมสูงเมื่อเร็ว ๆ นี้เมื่อปีที่แล้วและฉันไม่เห็นชื่อเรื่องล่าสุดในเทมเพลต C ++ ไม่มีใครรู้ว่าหนังสือเกี่ยวกับเทมเพลตที่ตีพิมพ์ในปี 2002 (ตรงข้ามกับหนังสือโดยเฉพาะเกี่ยวกับ STL) จะมีไวยากรณ์หรือแนวคิดที่ถูกแทนที่หรือเพิ่มโดยพูด C ++ 11 ไหม

ต่อไปนี้มาจากคำอธิบายหนังสือของ Amazon :

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

เทมเพลต C ++ เริ่มต้นด้วยการสอนที่ลึกซึ้งเกี่ยวกับแนวคิดพื้นฐานและคุณสมบัติด้านภาษา ส่วนที่เหลือของหนังสือเล่มนี้เป็นข้อมูลอ้างอิงที่ครอบคลุมโดยมุ่งเน้นที่รายละเอียดภาษาก่อนจากนั้นจึงใช้เทคนิคการเข้ารหัสที่หลากหลายและในที่สุดแอปพลิเคชันขั้นสูงสำหรับแม่แบบ ตัวอย่างที่ใช้ในหนังสือแสดงแนวคิดที่เป็นนามธรรมและแสดงให้เห็นถึงแนวปฏิบัติที่ดีที่สุด

ผู้อ่านเรียนรู้

  • พฤติกรรมที่แน่นอนของแม่แบบ
  • วิธีหลีกเลี่ยงข้อผิดพลาดที่เกี่ยวข้องกับแม่แบบ
  • สำนวนและเทคนิคต่าง ๆ ตั้งแต่พื้นฐานจนถึงแบบไม่มีเอกสารก่อนหน้านี้
  • วิธีการนำซอร์สโค้ดกลับมาใช้ใหม่โดยไม่คุกคามประสิทธิภาพหรือความปลอดภัย
  • วิธีเพิ่มประสิทธิภาพของโปรแกรม C ++
  • วิธีการผลิตซอฟต์แวร์ที่ยืดหยุ่นและบำรุงรักษาได้มากขึ้น

2
ในขณะที่ภาษา C ++ เปลี่ยนแปลงตัวเองช้าเท่านั้น (การเปลี่ยนแปลงครั้งใหญ่เกิดขึ้นทุก ๆ 10 ปี) และยังคงใช้งานร่วมกันได้ส่วนหลังหนังสือใน C ++ ไม่ได้อายุเท่ากัน
Bart van Ingen Schenau

คำตอบ:


12

อัปเดต (2016/08/24)

บทความที่แนะนำโดยมุ่งเน้นที่ C ++ 11:

แนะนำแนวคิด SFINAE ของ C ++: วิปัสสนาเวลารวบรวมของสมาชิกชั้นเรียน (Jean Guegant)


ในฐานะผู้เรียนของ C ++ เทมเพลตการเขียนโปรแกรมเมื่อไม่กี่เดือนที่ผ่านมาฉันยังคงแนะนำให้อ่านหนังสือเล่มนี้

มันไม่รวม C ++ 11 แต่มันจะวางไวยากรณ์และสเปค C ++ ว่าคอมไพเลอร์ควรประมวลผลรหัสเทมเพลตอย่างไร หนังสือเล่มนี้ครอบคลุมมุมที่ไม่ค่อยมีคนรู้จักซึ่งจะกลายเป็นเรื่องสำคัญหากคุณจำเป็นต้องใช้เทมเพลต C ++ อย่างมากไม่ว่าจะมีส่วนร่วมหรือไม่


ชิ้นส่วนที่หายไปจาก C ++ 11 คือ:


มีโครงสร้างที่คุณจะเห็นจำนวนมากในรหัสที่ถูกวางลงบน Stackoverflow std::enable_ifคือ: อย่างไรก็ตามในทางปฏิบัติฉันพบว่ามันใช้งานได้ค่อนข้างยากเนื่องจากกฎข้อ จำกัด One-Definition และ SFINAE นี่คือเหตุผลที่หนังสือเล่มนี้มีความสำคัญเพราะมันผ่านมากกว่าพื้นฐาน


หากคุณใช้เทมเพลต C ++ อย่างมากในไลบรารีข้ามแพลตฟอร์มคุณจะต้องรวบรวมรหัสของคุณในคอมไพเลอร์ที่แตกต่างกัน นี่เป็นเพราะคอมไพเลอร์แต่ละตัวมีระดับความสอดคล้องกับข้อกำหนด C ++ ที่แตกต่างกัน โค้ดที่คอมไพล์แล้วจะถูกปฏิเสธจากอีกฝ่ายและบางครั้งคอมไพเลอร์ที่ยอมรับก็เป็นโค้ดที่ทำลายข้อกำหนด


นี่คือบันทึกการอ่านของฉันเมื่อฉันอ่านหนังสือเล่มนี้ หวังว่ามันจะเป็นประโยชน์

บันทึกการอ่านหนังสือ - เทมเพลต C ++ - The Complete Guide (2003)

  • Ch 2.5 - เทมเพลตฟังก์ชั่น - สรุป
    • ความละเอียดเกินพิกัดและแนวปฏิบัติที่เหมาะสมที่สุด
  • Ch 3.3 - ความเชี่ยวชาญของแม่แบบคลาส
  • Ch 3.4 - ความเชี่ยวชาญเฉพาะบางส่วน
    • ความคลุมเครือ (ข้อผิดพลาด ODR) และวิธีแก้ไข ODR = กฎหนึ่งข้อ จำกัด
  • Ch 4.3 - ข้อ จำกัด สำหรับพารามิเตอร์เทมเพลตที่ไม่ใช่ประเภท
    • ตัวอย่าง: ตัวอักษรสตริงที่มีการเชื่อมโยงภายนอก
  • Ch 5 และ Ch 6 - บททั้งสองนี้ตกต่ำมาก คุณอาจต้องการข้ามมันแล้วย้อนกลับไปเมื่อคุณพร้อมที่จะใช้แม่แบบทางอารมณ์

  • ส่วนที่ II (Ch 8 - Ch ???) ส่วนของเนื้อหาขั้นสูง

  • Ch 8 - กฎเพิ่มเติม

    • สำหรับโปรแกรมเมอร์ที่คุ้นเคยกับ Ch 3 ทั้งหมด (เทมเพลตคลาส - พื้นฐาน) แล้วควรอ่าน Ch 8.1 และ 8.2 ตาม Ch 3 ทันทีเนื่องจากกฎเพิ่มเติมนั้นมีความสำคัญและเกี่ยวข้องกับกฎพื้นฐาน วิธีนี้จะช่วยลดความเจ็บปวด
  • 8.3.1 Ch (หน้า 106 ในการพิมพ์ครั้งที่ 12) กล่าวถึง SFINAE เป็นครั้งแรก

  • Ch 8.3 - ส่วนนี้จะแนะนำสถานการณ์จำนวนมากที่การทดแทนอาร์กิวเมนต์เทมเพลตจะนำไปสู่การขยายไวยากรณ์ที่ไร้สาระ (และกลายเป็นโมฆะซึ่งทำให้จำเป็นต้องใช้ SFINAE) บทนี้มีช่วงการเรียนรู้ที่สูงชันแม้สำหรับโปรแกรมเมอร์ C ++ ที่มีประสบการณ์
  • Ch 11 - การหักอาร์กิวเมนต์ของเทมเพลต

    • Ch11 มีตัวอย่างเทมเพลตการหักล้างข้อโต้แย้งเทมเพลตที่จำเป็นสำหรับการทำความเข้าใจแอปพลิเคชัน SFINAE
  • 12.4 Chward เป็นต้นไป - ความเชี่ยวชาญแม่แบบคลาสบางส่วน

    • สิ่งนี้ครอบคลุมกลไกภายในที่มักถูกเรียกใช้ในแอปพลิเคชัน SFINAE

ส่วนที่สาม (Ch 17 - Ch ???) Metaprogramming

  • Ch 17 - เริ่มต้นด้วยการเขียนโปรแกรมฟังก์ชั่นเบื้องต้น

  • App A.3 - รายละเอียดกฎหนึ่งข้อ (ODR)


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