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

10
เทมเพลต“ metaprogramming” ใน Java เป็นความคิดที่ดีหรือไม่
มีไฟล์ต้นฉบับในโครงการที่ค่อนข้างใหญ่ที่มีฟังก์ชั่นหลายอย่างที่มีความอ่อนไหวต่อประสิทธิภาพอย่างมาก (เรียกว่าล้านครั้งต่อวินาที) ในความเป็นจริงผู้ดูแลก่อนหน้านี้ตัดสินใจที่จะเขียน 12 สำเนาของฟังก์ชั่นที่แตกต่างกันเล็กน้อยมากเพื่อประหยัดเวลาที่จะใช้ในการตรวจสอบเงื่อนไขในฟังก์ชั่นเดียว น่าเสียดายที่นี่หมายถึงรหัสนี้เป็น PITA ที่จะรักษาไว้ ฉันต้องการลบรหัสที่ซ้ำกันทั้งหมดและเขียนเพียงหนึ่งเทมเพลต อย่างไรก็ตามภาษา, Java, ไม่รองรับเทมเพลตและฉันไม่แน่ใจว่ายาชื่อสามัญเหมาะสำหรับสิ่งนี้ แผนปัจจุบันของฉันคือการเขียนแทนไฟล์ที่สร้างฟังก์ชั่น 12 ชุด (ตัวขยายเทมเพลตแบบใช้ครั้งเดียวเท่านั้นจริง) แน่นอนฉันจะให้คำอธิบายมากมายว่าทำไมไฟล์จะต้องถูกสร้างขึ้นโดยทางโปรแกรม ความกังวลของฉันคือสิ่งนี้จะนำไปสู่ความสับสนของผู้ดูแลในอนาคตและอาจแนะนำข้อผิดพลาดที่น่ารังเกียจหากพวกเขาลืมสร้างไฟล์ใหม่หลังจากแก้ไขมันหรือ (ยิ่งแย่กว่า) หากพวกเขาแก้ไขไฟล์ที่สร้างโดยทางโปรแกรม โชคไม่ดีที่การเขียนใหม่ทั้งหมดใน C ++ ฉันไม่เห็นวิธีการแก้ไข ประโยชน์ของวิธีนี้มีมากกว่าข้อเสียหรือไม่ ฉันควรจะแทน: เพิ่มประสิทธิภาพการทำงานและใช้ฟังก์ชั่นเดียวที่บำรุงรักษาได้ เพิ่มคำอธิบายว่าทำไมฟังก์ชันจึงต้องทำซ้ำ 12 ครั้งและรับภาระการบำรุงรักษาอย่างสง่างาม พยายามใช้ข้อมูลทั่วไปเป็นเทมเพลต (อาจใช้ไม่ได้ผล) ตะโกนใส่ผู้ดูแลเก่าเพื่อสร้างรหัสขึ้นอยู่กับประสิทธิภาพในฟังก์ชั่นเดียว วิธีอื่นในการรักษาประสิทธิภาพและการบำรุงรักษา? ป.ล. เนื่องจากการออกแบบของโครงการไม่ดีการทำโปรไฟล์ฟังก์ชั่นค่อนข้างยุ่งยาก ... อย่างไรก็ตามผู้ดูแลคนก่อนทำให้ฉันมั่นใจว่าประสิทธิภาพในการทำงานนั้นไม่เป็นที่ยอมรับ ฉันคิดว่าเขามีความหมายมากกว่า 5% แม้ว่าจะเป็นการคาดเดาที่สมบูรณ์ในส่วนของฉัน บางทีฉันควรทำอย่างละเอียดหน่อย สำเนา 12 ชุดทำหน้าที่คล้ายกันมาก แต่มีความแตกต่างเล็กน้อย ความแตกต่างอยู่ในสถานที่ต่าง ๆ ตลอดทั้งฟังก์ชั่นดังนั้นน่าเสียดายที่มีข้อความมากมายที่มีเงื่อนไข การทำงานมีประสิทธิภาพ …

3
เหตุใดข้อความข้อผิดพลาดเทมเพลต C ++ จึงน่ากลัวมาก
เทมเพลต C ++ มีชื่อเสียงในด้านการสร้างข้อความแสดงข้อผิดพลาดที่ยาวและไม่สามารถอ่านได้ ฉันมีความคิดทั่วไปว่าทำไมข้อความแสดงข้อผิดพลาดแม่แบบใน C ++ จึงแย่มาก โดยพื้นฐานแล้วปัญหาคือว่าข้อผิดพลาดจะไม่ถูกเรียกจนกระทั่งคอมไพเลอร์พบไวยากรณ์ที่ไม่ได้รับการสนับสนุนจากบางประเภทในแม่แบบ ตัวอย่างเช่น: template <class T> void dosomething(T& x) { x += 5; } หากTไม่รองรับ+=ผู้ปฏิบัติงานคอมไพเลอร์จะสร้างข้อความแสดงข้อผิดพลาด และหากสิ่งนี้เกิดขึ้นลึกลงไปในห้องสมุดบางแห่งข้อความแสดงข้อผิดพลาดอาจยาวหลายพันบรรทัด แต่แม่แบบ C ++ นั้นเป็นเพียงกลไกสำหรับการพิมพ์เป็ดเวลาคอมไพล์ ข้อผิดพลาดแม่แบบ C ++ เป็นแนวคิดคล้ายกับข้อผิดพลาดประเภทรันไทม์ที่อาจเกิดขึ้นในภาษาแบบไดนามิกเช่น Python ตัวอย่างเช่นพิจารณารหัสไพ ธ อนต่อไปนี้: def dosomething(x): x.foo() ที่นี่หากxไม่มีfoo()วิธีใดตัวแปลภาษา Python จะแสดงข้อยกเว้นและแสดงการติดตามสแต็กพร้อมกับข้อความแสดงข้อผิดพลาดที่ค่อนข้างชัดเจนซึ่งระบุถึงปัญหา แม้ว่าข้อผิดพลาดจะไม่ถูกเรียกใช้จนกว่าล่ามจะอยู่ลึกเข้าไปในฟังก์ชั่นของห้องสมุด แต่ข้อความข้อผิดพลาดเกี่ยวกับรันไทม์ยังไม่ใกล้เคียงเท่าที่อาเจียนไม่สามารถอ่านได้โดยคอมไพเลอร์ C ++ ทั่วไป แล้วทำไมคอมไพเลอร์ C ++ ไม่สามารถบอกได้ชัดเจนว่าเกิดอะไรขึ้น …

5
เทมเพลต C ++ เป็นเพียงแมโครชนิดหนึ่งที่ได้รับการยกย่องหรือไม่?
จากการเปรียบเทียบที่แตกต่างกันระหว่างเทมเพลต C ++ และเจเนอรัล C # / Java เช่นนี้ - /programming/31693/what-are-the-differences-between-generics-in-c-and-java-and-templates-in-c/31929#31929 ฉันเข้าใจว่ามีการใช้เทมเพลต C ++ โดยการประมวลผลล่วงหน้าบางอย่าง (การแทนที่ข้อความธรรมดาก่อนการแยกวิเคราะห์) ไม่ได้รวบรวม เนื่องจากการตรวจสอบชนิดในเทมเพลต C ++ มีลักษณะคล้ายกับมาโคร C ฉันหมายความว่าหากมีข้อผิดพลาดบางอย่างพวกเขาเป็นข้อผิดพลาดจากรหัสที่สร้างขึ้นหลังจากการประมวลผลบล็อกรหัส templated ไม่ใช่จากแม่แบบเอง กล่าวอีกนัยหนึ่งมันเป็นแค่มาโครระดับสูงในซี จากนั้นฉันก็พบข้อเท็จจริงอื่น ๆ ที่สนับสนุนสิ่งนี้ - ฉันคิดว่าถ้ามีการใช้เทมเพลต C ++ โดยการประมวลผลล่วงหน้าจะมีปัญหากับการเชื่อมโยงแบบไดนามิก (โดยใช้. dll) และ googling ที่รวดเร็วสนับสนุนสิ่งนี้ อีกจุดคือค่าคงที่จำนวนเต็มสามารถส่งผ่านเป็นอาร์กิวเมนต์ไปยังเทมเพลต และมันยังรองรับการเรียกซ้ำบางประเภท แต่การเรียกซ้ำนี้ไม่พบในรหัสแอสเซมบลีที่รวบรวม / เครื่อง สิ่งที่เรียกซ้ำได้รับการจัดการในเวลารวบรวมโดยการสร้างฟังก์ชั่นสำหรับทุกการโทรซ้ำและจึงมีไบนารีที่ปฏิบัติการขนาดใหญ่ แต่เร็วกว่า แม้ว่าจะแตกต่างจากแมโคร C แต่มีความสามารถที่เหนือกว่า แต่เท็มเพลต …
27 c++  c  compiler  templates  macros 

3
ที่ควรวางตรรกะทางธุรกิจหลามใน django
ฉันเพิ่งเริ่มเรียนรู้การพัฒนา Django / Python / Web ปัญหานี้ทำให้ฉันหนักใจมาระยะหนึ่งแล้ว ฉันกำลังสร้างแอปพลิเคชันที่มีแม่แบบหลายรายการใน Django ฉันมี views.py ซึ่งเป็นเพียงการแสดงผลการตอบสนองต่อเทมเพลตนั้นและฉันมี models.py ที่ฉันได้จัดทำฐานข้อมูลของฉัน ในหนึ่งในเทมเพลตของฉันฉันต้องอัปโหลดภาพ (ซึ่งฉันสามารถทำได้) และฉันต้องเรียกใช้ลอจิกซึ่งขึ้นอยู่กับคุณสมบัติของภาพที่อัปโหลด (ยังไม่เสร็จ) ตรรกะนี้เกี่ยวข้องกับการคำนวณจำนวนมาก หลังจากทำการคำนวณตรรกะควรส่งคืนข้อมูล (พิกัด) ที่ประมวลผลไปยังเทมเพลต ฉันสามารถดำเนินการทั้งหมดนี้ได้สำเร็จในแอปพลิเคชันหลามแบบสแตนด์อโลนสำหรับการเรียกใช้ไฟล์หลามหลังจากที่อื่น อย่างไรก็ตามเนื่องจากตอนนี้ฉันต้องการทำให้เว็บแอปพลิเคชันนี้ฉันเริ่มใช้เฟรมเวิร์ก Django ฉันทำการค้นหาจำนวนมาก แต่ฉันยังคงไม่สามารถระบุได้ว่าฉันควรวางไฟล์ Python นี้ตรงไหนกับตรรกะทั้งหมด ฉันควรจะมีไฟล์ที่ใช้คลาสอื่น(logic.py)และเรียกมันจากview.py? ฉัน googled และพบว่านักพัฒนาจำนวนมากวางตรรกะทางธุรกิจของตนใน models.py ใน Django อย่างไรก็ตามฉันรู้สึกว่ามันไม่ถูกต้องเพราะรูปแบบควรสื่อสารกับส่วนหลังเท่านั้น ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมขอบคุณล่วงหน้า

4
ถ้ามี LISP จะทำให้การใช้ระบบมาโครง่ายขึ้นได้อย่างไร
ฉันเรียนรู้ Scheme จากSICPและฉันได้รับความประทับใจว่าส่วนใหญ่ของสิ่งที่ทำให้ Scheme และยิ่งกว่านั้น LISP พิเศษคือระบบมาโคร แต่เนื่องจากมาโครถูกขยายในเวลาคอมไพล์ทำไมคนไม่สร้างระบบมาโครที่เทียบเท่าสำหรับ C / Python / Java / อะไร ตัวอย่างเช่นเราสามารถผูกpythonคำสั่งexpand-macros | pythonหรืออะไรก็ได้ รหัสจะยังสามารถพกพาได้สำหรับผู้ที่ไม่ได้ใช้ระบบมาโครใครจะขยายมาโครก่อนที่จะเผยแพร่รหัส แต่ฉันไม่รู้อะไรเลยนอกจากเทมเพลตใน C ++ / Haskell ซึ่งฉันรวบรวมไม่เหมือนกันจริงๆ ถ้ามี LISP จะทำให้การใช้ระบบมาโครง่ายขึ้นได้อย่างไร

8
วิธีการกระจายความรู้สำหรับการเขียนโปรแกรมทั่วไปในหมู่สมาชิกในทีม?
ฉันอยู่ในสภาพแวดล้อมที่ผู้คนเชื่อว่า: Java generics เป็นคุณสมบัติที่ใช้สำหรับการเขียนไลบรารีโดยเฉพาะและไม่ใช่การเข้ารหัสที่แท้จริง C ++ เป็นภาษาการเขียนโปรแกรม OO; templateเป็นคุณสมบัติเสริมและหลีกเลี่ยงได้ แม้ว่าคนเหล่านี้จะพึ่งพาไลบรารีที่เขียนโดยใช้โปรแกรมทั่วไป (เช่น STL, คอนเทนเนอร์ Java) ถ้าผมเขียนโค้ดที่ใช้templateหรือgenericsรหัสวิจารณ์มีแนวโน้มที่จะปฏิเสธมันและจะแสดงความคิดเห็นที่จะเขียนมันใน"เหมาะสม / เข้าใจ / สง่างาม"วิธี ความคิดดังกล่าวสามารถใช้งานได้จากโปรแกรมเมอร์ปกติถึงผู้จัดการส่วนใหญ่อาวุโส ไม่มีทางออกเพราะ 90% ของเวลาคนเหล่านี้มีการวิ่งเต้น เป็นวิธีที่ดีที่สุด ( ไม่ถูกตัดคอ ) ของการอธิบายพวกเขาวิธีการปฏิบัติของการเขียนโค้ดซึ่งประกอบด้วย OO และการเขียนโปรแกรมทั่วไปทั้งสองในเวลาเดียวกันคืออะไร?
20 java  c++  templates  generics 

5
เหตุใด C ++ ไม่สามารถใช้แนวทางของ D ในการนำแนวคิดไปใช้
อย่างที่พวกคุณหลายคนรู้แนวคิดแนวทางของ C ++ สำหรับการ จำกัด ประเภทที่เป็นไปได้สำหรับอาร์กิวเมนต์เท็มเพลตล้มเหลวที่จะรวมอยู่ใน C ++ 11 ฉันเรียนรู้ว่าภาษาการเขียนโปรแกรม D 2.0 มีคุณสมบัติคล้ายกันสำหรับการเขียนโปรแกรมทั่วไป การแก้ปัญหาดูเหมือนว่าฉันจะค่อนข้างหรูหราและเรียบง่าย ดังนั้นคำถามของฉันทำไม C ++ ไม่สามารถใช้วิธีการที่คล้ายกัน เป้าหมายของแนวคิด C ++ อาจใหญ่กว่าการนำไปใช้ของ D หรือมรดกของ C ++ ป้องกันไม่ให้ใช้แนวทางดังกล่าว หรืออื่น ๆ ขอบคุณสำหรับคำตอบของคุณ ps หากต้องการดูตัวอย่างพลังการเขียนโปรแกรมทั่วไปของ D โปรดอ้างอิงถึงสิ่งนี้: /programming/7300298/metaprogramming-in-c-and-in-d/7303534#7303534
19 c++  templates  d 

5
โครงสร้างระบบแม่แบบโดยใช้ PHP ธรรมดาได้อย่างไร
ฉันอ่านคำถามนี้ไปที่ stackoverflow: /programming/104516/calling-php-functions-within-heredoc-strings และคำตอบที่ได้รับการยอมรับบอกว่าจะทำแม่แบบ PHP ธรรมดาดังนี้: template.php: <html> <head> <title> <? = $ ชื่อ?> </ title> </ head> <body> <? = getContent ()?> </ body> </ html> index.php: <php? $ title = 'ชื่อการสาธิต'; ฟังก์ชัน getContent () { ส่งคืน '<p> Hello World! </p>'; } รวมถึง ( 'template.php'); ?> สำหรับฉันข้างต้นไม่ได้มีโครงสร้างที่ดีในแง่ที่ template.php ขึ้นอยู่กับตัวแปรที่กำหนดไว้ในสคริปต์อื่น …
15 php  templates 

2
ฉันจะหลีกเลี่ยงการเขียนฟังก์ชัน pass-through มากมายใน wrapper ได้อย่างไร
ฉันมีคลาสซึ่งล้อมคลาสอื่นที่เป็นประเภทพื้นฐานทั่วไป เนื่องจากอินเตอร์เฟสประเภทฐานมีขนาดค่อนข้างใหญ่จึงเกี่ยวข้องกับการเขียนฟังก์ชั่นการส่งผ่านจำนวนมาก ฉันกำลังมองหาวิธีที่จะหลีกเลี่ยงปัญหานี้ ลองทำตัวอย่าง: Car / \ Volvo VolvoWithTrailer ตอนนี้ฉันต้องติดตั้งฟังก์ชั่นแต่ละอย่างในอินเทอร์เฟซสำหรับรถยนต์ของ VolvoWithTrailer และเรียกใช้ฟังก์ชั่นที่เหมาะสมบนวัตถุที่ห่อหุ้มวอลโว่ยกเว้นอาจ GetMaxSpeed ​​() ซึ่งจะคืนสิ่งที่ต่ำกว่า โดยทั่วไปฉันจะมีฟังก์ชั่นมากมายเช่น int VolvoWithTrailer::GetNumSeats() { return mVolvo.GetNumSeats() } วิธีที่ชัดเจนในการแก้ไขปัญหานี้คือการทำให้ VolvoWithTrailer เป็น subclass ของ Volvo Car | Volvo | VolvoWithTrailer แต่ดูเหมือนว่าจะละเมิดหลักการของการสนับสนุนการแต่งมากกว่ามรดก ฉันจะหลีกเลี่ยงการเขียนโปรแกรมเสริมเหล่านี้ได้อย่างไร (ภาษาคือ C ++) หรือ - ถ้านั่นคือตำแหน่งของคุณ - ทำไมฉันต้องเขียนพวกเขา / แค่ใช้การสืบทอด? มีแม่แบบเวทย์มนตร์ที่สามารถช่วยได้หรือไม่?

3
คุณจะจัดการกับเวลาการคอมไพล์ที่ยาวขึ้นเมื่อทำงานกับเทมเพลตได้อย่างไร?
ฉันใช้ Visual Studio 2012 และเขามีกรณีที่เราเพิ่มพารามิเตอร์แม่แบบให้กับคลาส "เพียง" เพื่อแนะนำ "จุดตะเข็บ" เพื่อให้ในการทดสอบหน่วยเราสามารถแทนที่ส่วนเหล่านั้นด้วยวัตถุจำลอง โดยปกติคุณจะแนะนำจุดตะเข็บใน C ++ ได้อย่างไร: การใช้อินเตอร์เฟสและ / หรือการผสมตามเกณฑ์บางอย่างที่มีอินเตอร์เฟสนัยโดยใช้พารามิเตอร์เทมเพลตด้วย? เหตุผลหนึ่งที่ต้องถามเรื่องนี้ก็เพราะเมื่อบางครั้งการรวบรวมไฟล์ C ++ ไฟล์เดียว (ที่มีไฟล์แม่แบบที่อาจรวมถึงแม่แบบอื่น ๆ ) ส่งผลให้ในวัตถุไฟล์ที่ถูกสร้างขึ้นที่ใช้เวลาประมาณ 5-10 วินาทีในเครื่องนักพัฒนา . VS คอมไพเลอร์ยังไม่รวดเร็วโดยเฉพาะอย่างยิ่งในการรวบรวมเทมเพลตเท่าที่ฉันเข้าใจและเนื่องจากรูปแบบการรวมเทมเพลต (คุณได้รวมคำจำกัดความของเทมเพลตในทุกไฟล์ที่ใช้มันโดยอ้อมและอาจเป็นอินสแตนซ์เทมเพลตนั้นทุกครั้ง สิ่งที่ไม่มีส่วนเกี่ยวข้องกับเทมเพลตนั้น) คุณอาจมีปัญหากับเวลาในการคอมไพล์ (เมื่อทำการคอมไพล์แบบเพิ่มเติม) คุณมีวิธีจัดการกับเวลารวบรวมแบบเพิ่มขึ้น (และไม่เพียง) เมื่อทำงานกับแม่แบบ (นอกเหนือจากคอมไพเลอร์ที่ดีขึ้น / เร็วขึ้น :-))
13 c++  tdd  templates 

4
ฉันควรรวมมาร์กอัพ HTML ในการตอบสนอง JSON ของฉันหรือไม่
ในไซต์อีคอมเมิร์ซเมื่อเพิ่มรายการลงในรถเข็นฉันต้องการแสดงหน้าต่างป๊อปอัปพร้อมตัวเลือกที่คุณสามารถเลือกได้ ลองนึกภาพคุณกำลังสั่งซื้อ iPod Shuffle และตอนนี้คุณต้องเลือกสีและข้อความที่จะแกะสลัก ฉันต้องการให้หน้าต่างเป็นแบบโมดัลดังนั้นฉันจึงใช้Lightbox ที่มีการเรียก Ajax ตอนนี้ฉันมีสองตัวเลือก: ตัวเลือก 1: ส่งข้อมูลเท่านั้นและสร้างมาร์กอัพ HTML โดยใช้ JavaScript สิ่งที่ดีเกี่ยวกับเรื่องนี้คือมันทำให้คำขออาแจ็กซ์ลดน้อยลงและไม่ผสมข้อมูลกับมาร์กอัป สิ่งที่ไม่ดีนักเกี่ยวกับเรื่องนี้คือตอนนี้ฉันต้องใช้ JavaScript เพื่อแสดงผลของฉันแทนที่จะมีเทมเพลตเอ็นจิ้นบนฝั่งเซิร์ฟเวอร์ทำ ฉันอาจจะสามารถที่จะทำความสะอาดวิธีบิตโดยใช้วิธีการแก้ปัญหา templating ฝั่งไคลเอ็นต์ ตัวเลือก 2: ส่งมาร์กอัพ HTML สิ่งที่ดีเกี่ยวกับเรื่องนี้คือฉันสามารถมีเครื่องมือสร้างเทมเพลตฝั่งเซิร์ฟเวอร์เดียวกับที่ฉันใช้สำหรับงานการเรนเดอร์ที่เหลือ (Django) ทำการเรนเดอร์ของไลท์บ็อกซ์ JavaScript ใช้เพื่อแทรกแฟรกเมนต์ HTML ลงในหน้าเท่านั้น ดังนั้นจะทำให้การเรนเดอร์ไปยังเอ็นจินการเรนเดอร์อย่างชัดเจน ทำให้รู้สึกถึงฉัน แต่ฉันรู้สึกไม่สบายใจที่จะรวบรวมข้อมูลและมาร์กอัพในการโทร Ajax ด้วยเหตุผลบางอย่าง ฉันไม่แน่ใจว่าอะไรทำให้ฉันรู้สึกไม่สบายใจ ฉันหมายความว่ามันเป็นวิธีเดียวกับที่ทุกหน้าเว็บแสดงผล - ข้อมูลและมาร์กอัป - ใช่ไหม?
13 mvc  django  templates  json 

2
ใน C ++, SFINAE และ metaprogramming ตั้งใจหรือเป็นเพียงแค่ผลพลอยได้ของแม่แบบหรือไม่?
SFINAEและtemplatemetaprogramming สามารถทำสิ่งมหัศจรรย์ได้และห้องสมุดหลายแห่งก็ใช้พวกมันอย่างมาก ในอดีตทั้งสอง "แนวคิดเกี่ยวกับเวทมนต์" เหล่านี้ได้รับการแนะนำ / สนับสนุนใน C ++ อย่างจงใจ? หรือพวกเขาเพิ่งค้นพบในภายหลังว่าเป็นผลพลอยได้ที่มีประโยชน์ (ผลิตภัณฑ์ด้านข้าง) ของtemplateการเขียนโปรแกรมต้นฉบับ?

1
“ เทมเพลต C ++: คู่มือฉบับสมบูรณ์” (c) 2002 - รุ่นล่าสุดด้วย C ++ 11?
เทมเพลต C ++หนังสือ: คู่มือฉบับสมบูรณ์ , (c) 2002, ดูน่าสนใจสำหรับฉันมาก, แต่เนื่องจากอายุ 12 ปี, ฉันกังวลว่ามันอาจล้าสมัย มีบทวิจารณ์ของ Amazon ที่ได้รับความนิยมสูงเมื่อเร็ว ๆ นี้เมื่อปีที่แล้วและฉันไม่เห็นชื่อเรื่องล่าสุดในเทมเพลต C ++ ไม่มีใครรู้ว่าหนังสือเกี่ยวกับเทมเพลตที่ตีพิมพ์ในปี 2002 (ตรงข้ามกับหนังสือโดยเฉพาะเกี่ยวกับ STL) จะมีไวยากรณ์หรือแนวคิดที่ถูกแทนที่หรือเพิ่มโดยพูด C ++ 11 ไหม ต่อไปนี้มาจากคำอธิบายหนังสือของ Amazon : เทมเพลตเป็นหนึ่งในคุณสมบัติที่ทรงพลังที่สุดของ C ++ แต่บ่อยครั้งที่พวกเขาถูกทอดทิ้งถูกเข้าใจผิดและใช้ผิดประเภท เทมเพลต C ++: คู่มือฉบับสมบูรณ์ช่วยให้สถาปนิกและวิศวกรซอฟต์แวร์เข้าใจอย่างชัดเจนว่าทำไมเมื่อใดและอย่างไรถึงจะใช้เทมเพลตเพื่อสร้างและบำรุงรักษาซอฟต์แวร์ที่สะอาดขึ้นเร็วขึ้นและชาญฉลาดยิ่งขึ้น เทมเพลต C ++ เริ่มต้นด้วยการสอนที่ลึกซึ้งเกี่ยวกับแนวคิดพื้นฐานและคุณสมบัติด้านภาษา ส่วนที่เหลือของหนังสือเล่มนี้เป็นข้อมูลอ้างอิงที่ครอบคลุมโดยมุ่งเน้นที่รายละเอียดภาษาก่อนจากนั้นจึงใช้เทคนิคการเข้ารหัสที่หลากหลายและในที่สุดแอปพลิเคชันขั้นสูงสำหรับแม่แบบ ตัวอย่างที่ใช้ในหนังสือแสดงแนวคิดที่เป็นนามธรรมและแสดงให้เห็นถึงแนวปฏิบัติที่ดีที่สุด ผู้อ่านเรียนรู้ พฤติกรรมที่แน่นอนของแม่แบบ วิธีหลีกเลี่ยงข้อผิดพลาดที่เกี่ยวข้องกับแม่แบบ สำนวนและเทคนิคต่าง ๆ …
10 c++  templates 

4
C ++ วิธีที่ต้องการในการจัดการกับการใช้งานสำหรับแม่แบบขนาดใหญ่
โดยทั่วไปเมื่อประกาศคลาส C ++ เป็นแนวปฏิบัติที่ดีที่สุดที่จะใส่เฉพาะการประกาศในไฟล์ส่วนหัวและวางการประยุกต์ใช้ในไฟล์ต้นฉบับ อย่างไรก็ตามดูเหมือนว่ารูปแบบการออกแบบนี้จะไม่ทำงานกับคลาสเทมเพลต เมื่อดูทางออนไลน์มีความคิดเห็น 2 ข้อเกี่ยวกับวิธีที่ดีที่สุดในการจัดการคลาสเทมเพลต: 1. การประกาศทั้งหมดและการใช้งานในส่วนหัว สิ่งนี้ค่อนข้างตรงไปตรงมา แต่นำไปสู่สิ่งที่ฉันคิดว่าเป็นเรื่องยากที่จะรักษาและแก้ไขไฟล์โค้ดเมื่อเทมเพลตมีขนาดใหญ่ 2. เขียนการใช้งานในเทมเพลตรวมไฟล์ (.tpp) ที่รวมอยู่ท้าย ดูเหมือนว่าจะเป็นทางออกที่ดีกว่าสำหรับฉัน แต่ดูเหมือนจะไม่ได้ใช้อย่างกว้างขวาง มีเหตุผลที่วิธีนี้ด้อยกว่าหรือไม่? ฉันรู้ว่าหลายครั้งที่รูปแบบของรหัสถูกกำหนดโดยการตั้งค่าส่วนตัวหรือรูปแบบดั้งเดิม ฉันกำลังเริ่มโครงการใหม่ (การย้ายโครงการ C เก่าไปยัง C ++) และฉันค่อนข้างใหม่ในการออกแบบ OO และต้องการปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดตั้งแต่เริ่มต้น

1
doxygen รองรับเทมเพลตสำหรับเอาต์พุต HTML หรือไม่
ฉันได้บันทึกรหัสไว้doxygenแล้ว แต่ฉันไม่ต้องการ HTML ที่เป็นค่าเริ่มต้น ฉันรู้ว่าฉันสามารถปรับแต่งได้ด้วยการให้ CSS หัวกระดาษท้ายกระดาษ ฯลฯ (เช่น GNOME) และฉันจะเพิ่มรหัส PHP ทั่วไปลงในไฟล์และบอกให้บันทึกได้.phpแต่นั่นไม่ใช่สิ่งที่ฉันต้องการจริงๆ . สิ่งที่ฉันต้องการคือผลลัพธ์เช่น MSDN ฉันไม่สามารถอธิบายได้จริงๆ คำถามของฉันคือมีความเป็นไปได้ในการใช้ doxygen กับบางสิ่งบางอย่างเช่นเทมเพลตหรือฉันต้องแสดงผล XML และแยกมันด้วยโปรแกรมอื่น

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