แนะนำที่ดีที่สุดสำหรับการเขียนโปรแกรมแม่แบบ C ++? [ปิด]


112

Static metaprogramming (aka "template metaprogramming") เป็นเทคนิค C ++ ที่ยอดเยี่ยมที่ช่วยให้สามารถเรียกใช้โปรแกรมได้ในเวลาคอมไพล์ หลอดไฟดับลงในหัวของฉันทันทีที่ฉันอ่านตัวอย่างการเขียนโปรแกรมเมตาแบบบัญญัตินี้:

#include <iostream>
using namespace std;

template< int n >
struct factorial { enum { ret = factorial< n - 1 >::ret * n }; };

template<>
struct factorial< 0 > { enum { ret = 1 }; };

int main() {
    cout << "7! = " << factorial< 7 >::ret << endl; // 5040
    return 0;
}

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการเขียนโปรแกรมแบบคงที่ C ++ แหล่งข้อมูลที่ดีที่สุดคืออะไร (หนังสือเว็บไซต์บทเรียนออนไลน์อะไรก็ได้)


43
หลอดไฟ "ปิด" หรือ "เปิด"?
horseyguy

36
ปิด ปิดแน่นอน
Thomas Eding

คำตอบ:


108

[ตอบคำถามของตัวเอง]

บทนำที่ดีที่สุดที่ฉันเคยพบคือบทที่ 10 "Static Metaprogramming ใน C ++" จากGenerative Programming, Methods, Tools และ Applicationsโดย Krzysztof Czarnecki และ Ulrich W. Eisenecker, ISBN-13: 9780201309775; และบทที่ 17 "Metaprograms" ของเทมเพลต C ++: The Complete Guideโดย David Vandevoorder และ Nicolai M. Josuttis, ISBN-13: 9780201734843

ข้อความแสดงแทน ข้อความแสดงแทน ข้อความแสดงแทน ข้อความแสดงแทน

ทอดด์ Veldhuizen มีการกวดวิชาที่ยอดเยี่ยมที่นี่

แหล่งข้อมูลที่ดีสำหรับการเขียนโปรแกรม C ++ โดยทั่วไปคือModern C ++ Designโดย Andrei Alexandrescu, ISBN-13: 9780201704310 หนังสือเล่มนี้ผสมผสานระหว่าง metaprogramming กับเทคนิคเทมเพลตอื่น ๆ สำหรับการเขียนโปรแกรม metaprogram โดยเฉพาะโปรดดูส่วน 2.1 "การยืนยันเวลาคอมไพล์", 2.4 "การแม็ปอินทิกรัลคงที่เป็นประเภท", 2.6 "การเลือกประเภท", 2.7 "การตรวจจับการแปลงและการสืบทอดที่เวลาคอมไพล์", 2.9 " NullTypeและEmptyType" และ 2.10 "ลักษณะประเภท "

ทรัพยากรระดับกลาง / ขั้นสูงที่ดีที่สุดที่ฉันพบคือC ++ Template Metaprogrammingโดย David Abrahams และ Aleksey Gurtovoy, ISBN-13: 9780321227256

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


2
ลิงก์ไปยังชิ้นส่วนของ Todd Veldhuizen หายไปแล้ว
John R.Strohm

1
ฉันเชื่อว่าสิ่งนี้: www10.informatik.uni-erlangen.de/~pflaum/pflaum/ProSeminar/…
0fnt

1
ลิงก์แก้ไขแล้วขอบคุณ!
jwfearn

ลิงค์เสียอีกแล้ว!
พอล

1
ขอบคุณ @jwfearn ฉันอ่านบทความนี้แม้ว่าฉันจะพบว่าสิ่งนี้น่าสนใจกว่า: youtube.com/watch?v=Am2is2QCvxY (มีสองส่วน) เป็นการพูดโดย Walter E.Brown: Modern Template Metaprogramming: A Compendium
Paul

24

หนังสือการออกแบบ C ++ สมัยใหม่ของ Andrei Alexandrescu ครอบคลุมเรื่องนี้และเคล็ดลับอื่น ๆ มากมายสำหรับรหัส C ++ สมัยใหม่ที่รวดเร็วและมีประสิทธิภาพและเป็นพื้นฐานสำหรับห้องสมุดLoki

สิ่งที่ควรค่าแก่การกล่าวถึงคือไลบรารีBoostซึ่งใช้เทคนิคเหล่านี้อย่างมากและมักจะมีคุณภาพสูงมากในการเรียนรู้ (แม้ว่าบางส่วนจะค่อนข้างหนาแน่น)


12

Modern C ++ Designหนังสือที่ยอดเยี่ยมและกรอบรูปแบบการออกแบบโดย Alexandrescu คำเตือนหลังจากอ่านหนังสือเล่มนี้ฉันเลิกทำ C ++ แล้วและคิดว่า "ห่าฉันสามารถเลือกภาษาที่ดีกว่านี้และรับได้ฟรี"


5
"ห่าฉันสามารถเลือกภาษาที่ดีกว่านี้และรับได้ฟรี" อืมคุณหมายถึงอะไร? ฉันสับสนเป็นพิเศษกับ "ฟรี" แล้วคุณคิดภาษาอะไรอีกบ้าง?
Pop Catalin

12
การเขียนโปรแกรมเทมเพลต C ++ ช่วยให้คุณมีความสามารถใหม่ ๆ เช่นการส่งผ่านประเภทหรือรายการประเภทเป็นอาร์กิวเมนต์เป็นต้นความสามารถเหล่านี้ส่วนใหญ่มีอยู่ในภาษาที่พิมพ์แบบไดนามิกเช่น python พร้อมด้วยไวยากรณ์ที่ดีกว่า
Florian Bösch

1
หากคุณกำลังมองหาภาษาที่คุณสามารถเขียนโปรแกรมที่ถูกต้องได้อย่างรวดเร็ว Python นั้นดีกว่า C ++ หากคุณต้องการสิ่งอื่น ๆ ที่ C ++ มอบให้การเพิ่มความสามารถคล้ายเสียงกระเพื่อมให้กับ C ++ อาจดีกว่าการพยายามใช้ภาษา C ++ หากเป็นภาษาอื่น
David Thornley

6

หนังสือดีสองเล่มที่นึกถึงคือ:

  • การออกแบบ C ++ สมัยใหม่ / Andrei Alexandrescu (อายุ 7 ปีแม้จะมีชื่อก็ตาม!)
  • เทมเพลต C ++: The Complete Guide / Vandevoorde & Josuttis

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


5

Modern C ++เป็นหนึ่งในคำนำที่ดีที่สุดที่ฉันเคยอ่าน ครอบคลุมตัวอย่างที่เป็นประโยชน์จริงของการเขียนโปรแกรมแม่แบบ ลองดูห้องสมุดคู่หูโลกิด้วย


5

จะไม่มีรายชื่อหนังสือจำนวนมากเนื่องจากรายชื่อผู้ที่มีประสบการณ์มากมี จำกัด การเขียนโปรแกรมแม่แบบเริ่มต้นขึ้นจริงในการประชุมเชิงปฏิบัติการการเขียนโปรแกรมแม่แบบ C ++ ครั้งแรกในปี พ.ศ. 2543 และมีผู้เขียนหลายคนเข้าร่วม (IIRC, Andrei ไม่ได้) ผู้บุกเบิกเหล่านี้มีอิทธิพลอย่างมากในสนามและโดยพื้นฐานแล้วสิ่งที่ควรเขียนคือตอนนี้ โดยส่วนตัวแล้วฉันแนะนำ Vandevoorde & Josuttis Alexandrescu's เป็นหนังสือที่ยากหากคุณยังใหม่กับสนาม


4

เอกสารต้นฉบับของ Veldhuizen นั้นดี หากคุณอ่านหนังสือทั้งเล่มมีหนังสือ "C ++ Templates Complete Guide" ของ Vandevoorde และเมื่อคุณพร้อมสำหรับหลักสูตรปริญญาโทลองใช้ Modern C ++ Design ของ Alexandrescu


4

google Alexandrescu, การออกแบบ C ++ สมัยใหม่: ประยุกต์ใช้การเขียนโปรแกรมและรูปแบบการออกแบบทั่วไป

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