วิศวกรรมซอฟต์แวร์

ถาม - ตอบสำหรับมืออาชีพนักวิชาการและนักเรียนที่ทำงานในวงจรการพัฒนาระบบ

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

6
อะไรคือแนวคิดการเขียนโปรแกรมที่ฉันควรจะมีความเข้าใจอย่างลึกซึ้งเกี่ยวกับงานฝีมือของฉัน (การเขียนโปรแกรม)? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ตามลำดับความสำคัญหากเป็นไปได้ที่จะทำเช่นนั้นและอาจไม่ใช่สิ่งที่เป็นรากฐานที่สำคัญที่สุดในการรู้วิธีการเขียนโปรแกรม อัลกอริทึมการทำซ้ำการเรียกซ้ำ ฯลฯ ? โปรดทราบว่าที่ฉันใส่ ฯลฯ เป็นที่ที่คำถามของฉันอยู่ ฉันเพิ่งอ่านโพสต์ทางอินเทอร์เน็ตที่เขียนว่า 9 จาก 10 โปรแกรมเมอร์ไม่สามารถอ้าปากค้างโปรแกรมได้! http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html ฉันต้องการที่จะมีความรู้อย่างลึกซึ้งเกี่ยวกับสิ่งที่ฉันเป็นจริงพยายามที่จะบรรลุเมื่อการเขียนโปรแกรมและความเข้าใจที่ละเอียดถี่ถ้วนของเครื่องมือพื้นฐานในการกำจัดของฉัน โดยทั่วไปฉันต้องการที่จะสามารถวาดด้วยทุกสีของลม

3
ใช้การทดสอบหน่วยเพื่อบอกเล่าเรื่องราวความคิดที่ดีหรือไม่?
ดังนั้นฉันมีโมดูลการตรวจสอบสิทธิ์ที่ฉันเขียนเมื่อไม่นานมานี้ ตอนนี้ฉันเห็นข้อผิดพลาดในทางของฉันและเขียนการทดสอบหน่วยสำหรับมัน ในขณะที่เขียนการทดสอบหน่วยฉันมีช่วงเวลาที่ยากลำบากในการหาชื่อที่ดีและพื้นที่ที่ดีสำหรับการทดสอบ ตัวอย่างเช่นฉันมีสิ่งที่ชอบ RequiresLogin_should_redirect_when_not_logged_in RequiresLogin_should_pass_through_when_logged_in Login_should_work_when_given_proper_credentials โดยส่วนตัวฉันคิดว่ามันน่าเกลียดนิดหน่อยถึงแม้ว่ามันจะดูเหมือน "เหมาะสม" ก็ตาม ฉันยังมีปัญหาในการแยกความแตกต่างระหว่างการทดสอบโดยการสแกนพวกเขา (ฉันต้องอ่านชื่อวิธีการอย่างน้อยสองครั้งเพื่อทราบว่าล้มเหลวเพียงใด) ดังนั้นฉันคิดว่าอาจจะแทนที่จะเขียนแบบทดสอบที่ทดสอบการทำงานล้วนๆอาจจะเขียนชุดการทดสอบที่ครอบคลุมสถานการณ์ ตัวอย่างเช่นนี่คือส่วนทดสอบที่ฉันสร้างขึ้นด้วย: public class Authentication_Bill { public void Bill_has_no_account() { //assert username "bill" not in UserStore } public void Bill_attempts_to_post_comment_but_is_redirected_to_login() { //Calls RequiredLogin and should redirect to login page } public void Bill_creates_account() { //pretend the login page …

4
เน้นการปฏิเสธ
ฉันเพิ่งเขียนคำสั่ง if ที่มีชื่อคุณสมบัติยาวพอสมควรและเกิดปัญหานี้ขึ้น สมมติว่าเรามีคำสั่ง if เช่นนี้: if(_someViewModelNameThatIsLong.AnotherPropertyINeedToCheck == someValue && !_someViewModelNameThatIsLong.ThisIsABooleanPropertyThatIsImportant) { //Do something } คุณสมบัติที่สองเป็นประเภทบูลีนและไม่มีเหตุผลใดที่จะมี stetement เช่นนี้ if(boleanValue == true) มีวิธีที่ดีกว่าในการเน้นการปฏิเสธจากนั้นให้ใส่!ด้านหน้า สำหรับฉันดูเหมือนว่าเรื่องนี้สามารถดูแลได้ง่ายเมื่ออ่านรหัสและอาจทำให้เกิดปัญหากับการดีบัก

2
คำว่า "คุณสมบัติคืบ" มาจากไหน?
มีบทความ Wikipedia ที่ดีเกี่ยวกับ "Feature Creep" แต่ไม่ได้ระบุที่มา การค้นหาโดย Googleจะนำไปสู่บทความที่คลุมเครือบางฉบับที่อ้างว่า "Earl Rich" เป็นคนบัญญัติศัพท์ แต่ก็ไม่มีการสำรองข้อมูลสำหรับการอ้างสิทธิ์นั้นมากนัก มีการ์ตูน Dilbert จากปี 2001ในเรื่อง แต่เสียงดูเหมือนจะบ่งบอกว่าคำที่มีอยู่ก่อน; มากหรือน้อยได้รับการยืนยันจากข้อเท็จจริงที่ว่าGoogle มีผล pre-2000 อย่างไรก็ตามการหาแหล่งกำเนิดที่แน่นอนพิสูจน์ยาก ดังนั้นใครถ้าใครเลยประกาศเกียรติคุณคำว่า "Feature Creep"? มันมาจากไหน?

4
อะไรคือข้อดีของสถาปัตยกรรมไคลเอนต์ / เซิร์ฟเวอร์ในการใช้งานแอปพลิเคชันซึ่งตรงข้ามกับเซิร์ฟเวอร์ที่สร้างแอปพลิเคชันส่วนหน้า
ใน บริษัท ของเราเราต้องสร้างเว็บอินเตอร์เฟสบนแพลตฟอร์มลินุกซ์ในตัว ฉันเห็นตัวเลือก 2 แบบ: คุณใช้เทคโนโลยีที่ HTML และ JavaScript ถูกสร้างขึ้นบนฝั่งเซิร์ฟเวอร์ (คิดว่า JSP, Grails แต่เป็นสิ่งที่ใช้ C ++ และสร้าง HTML / JavaScript) หรือคุณสร้าง 'ไคลเอนต์' HTML5 แอ็พพลิเคชันที่พูดถึง JSON หรือ XML สร้างแบ็กเอนด์ ฉันมีความรู้สึกว่าปัจจุบันเว็บแอปพลิเคชันมักจะไปกับสิ่งที่ตามมา แต่ข้อดีของการทำเช่นนั้น (นักพัฒนาในโครงการเลือกอดีตส่วนใหญ่ขึ้นอยู่กับความจริงที่ว่าพวกเขารู้ C ++ ดีกว่า HTML และ Javascript)

2
วิธีโปรแกรมการจัดสรรเธรดบนตัวประมวลผลแบบมัลติคอร์
ฉันต้องการทดสอบกับเธรดในโปรเซสเซอร์แบบมัลติคอร์เช่นสร้างโปรแกรมที่ใช้สองเธรดที่แตกต่างกันซึ่งประมวลผลโดยแกนประมวลผลที่แตกต่างกันสองคอร์ อย่างไรก็ตามมันไม่ชัดเจนสำหรับฉันในระดับที่เธรดจะถูกจัดสรรให้กับคอร์ที่ต่างกัน ฉันสามารถจินตนาการสถานการณ์ต่อไปนี้ (ขึ้นอยู่กับระบบปฏิบัติการและการใช้ภาษาโปรแกรม): การจัดสรรเธรดได้รับการจัดการโดยระบบปฏิบัติการ เธรดถูกสร้างขึ้นโดยใช้การเรียกใช้ระบบปฏิบัติการและหากกระบวนการเกิดขึ้นกับโปรเซสเซอร์แบบมัลติคอร์ระบบปฏิบัติการจะพยายามจัดสรร / กำหนดเธรดที่แตกต่างกันโดยอัตโนมัติบนแกนที่ต่างกัน การจัดสรรเธรดได้รับการจัดการโดยการใช้ภาษาการเขียนโปรแกรม การจัดสรรเธรดให้กับคอร์อื่นต้องใช้การเรียกของระบบพิเศษ แต่ไลบรารีเธรดมาตรฐานการเขียนโปรแกรมภาษาจะจัดการสิ่งนี้โดยอัตโนมัติเมื่อฉันใช้การใช้เธรดมาตรฐานสำหรับภาษานั้น การจัดสรรเธรดต้องถูกโปรแกรมอย่างชัดเจน ในโปรแกรมของฉันฉันต้องเขียนรหัสที่ชัดเจนเพื่อตรวจสอบจำนวนคอร์ที่มีอยู่และการจัดสรรเธรดที่แตกต่างให้กับคอร์ที่แตกต่างกันโดยใช้ฟังก์ชั่นห้องสมุด เพื่อให้คำถามมีความเฉพาะเจาะจงยิ่งขึ้นลองจินตนาการว่าฉันได้เขียนแอพพลิเคชั่นแบบมัลติเธรดใน Java หรือ C ++ บน Windows หรือ Linux แอปพลิเคชันของฉันจะดูและใช้หลายคอร์อย่างน่าอัศจรรย์เมื่อทำงานบนโปรเซสเซอร์แบบมัลติคอร์หรือไม่ (เพราะทุกอย่างได้รับการจัดการโดยระบบปฏิบัติการหรือโดยเธรดไลบรารีมาตรฐาน) หรือฉันต้องแก้ไขรหัสของฉันเพื่อรับรู้ถึงหลายแกน ?

4
ตารางประวัติฐานข้อมูล / ตารางการติดตาม
ขณะนี้ฉันต้องการจัดโครงสร้างตารางการติดตาม / ประวัติดังนี้: PrimaryKey - ID OtherTableId - fk fieldName - ชื่อของฟิลด์ที่ติดตาม OLDVALUE NewValue ชื่อผู้ใช้ CreateDateTime โดยพื้นฐานแล้วฉันต้องการมีตารางที่จะติดตามประวัติของตารางอื่นเก็บชื่อคอลัมน์ของฟิลด์ที่ถูกเปลี่ยนแปลงด้วยค่าใหม่และเก่า คำถามของฉันคือทุกคนสามารถเจาะรูในนี้ นอกจากนี้วิธีที่ง่ายที่สุดในการตรวจสอบให้แน่ใจว่ามีเพียงชื่อคอลัมน์จากตารางที่ติดตามเท่านั้นที่ถูกป้อนลงในคอลัมน์ fieldName ปัจจุบันตัวเลือกของฉันจะต้องมี enum ในบริการที่ฉันกำลังสร้างหรือสร้างตารางสถานะอื่นและทำให้ fieldName เป็น fk มีความคิดที่ดีกว่านี้ไหม? แก้ไข เป้าหมาย: ขณะนี้มีเพียง 2 ฟิลด์ที่เราต้องการติดตาม หนึ่งฟิลด์จะปรากฏบนหน้าเว็บเพื่อแสดงประวัติส่วนอื่น ๆ จะเข้าถึงได้โดยแผนกหนึ่งเท่านั้นและพวกเขามีสิทธิ์เข้าถึงมุมมองของฐานข้อมูลที่พวกเขาสามารถสืบค้นได้ พวกเขาต้องการสอบถามเพียงหนึ่งช่องนี้เพื่อรับข้อมูลว่าใครเปลี่ยนฟิลด์และจะทำอย่างไร นี่คือเหตุผลที่เราต้องการตั้งค่าที่เขตข้อมูลฐานข้อมูลกำหนดคอลัมน์ตารางแทนที่จะมีสำเนาที่แน่นอนของประวัติศาสตร์บันทึกตาราง เราต้องการเพียงสองฟิลด์ที่ถูกติดตามพร้อมกับความเป็นไปได้ในการเพิ่มหรือลบฟิลด์ในอนาคต ขอบคุณ!
13 database  sql  tracking 

2
ฉันสามารถใช้ JavaScript ลิขสิทธิ์ GPL บนเว็บไซต์การค้าได้หรือไม่
ฉันกำลังดูข้อมูลอัปโหลดบางคุณสมบัติในเว็บไซต์ที่ฉันกำลังพัฒนา ตอนนี้ plupload เป็น GNU GPLv2 ที่ได้รับอนุญาตและนั่นก็หมายความว่าซอฟต์แวร์อนุพันธ์ทั้งหมดควรเป็น GPL ที่ได้รับอนุญาตด้วย (ใช่ไหม) ดังนั้นฉันจึงเรียกใช้ plupload ผ่าน minifier ของฉันไฟล์ js minified เดียวจะละเมิดใบอนุญาตและเมื่อมีการร้องขอฉันต้องทำให้ที่มาทั้งหมดของหน้าของฉันพร้อมใช้งาน (ใช่ไหม) ฉันอยากรู้เกี่ยวกับ: ฉันจะใช้ plupload API ได้อย่างไรโดยไม่ต้องเปิดซอร์สโค้ดของฉัน ใบอนุญาตไม่รวมรหัส minified อย่างใด? ดูเพิ่มเติมที่: /programming/3213767/minified-javascript-and-bsd-license
13 licensing 

3
ฉันจะซ่อนข้อมูลที่เป็นความลับในโครงการโอเพ่นซอร์สของฉันได้อย่างไร
ฉันมีโครงการโอเพ่นซอร์สที่อัปโหลดไฟล์ไปยัง DropBox ท่ามกลางโฮสต์ไฟล์หลาย ๆ แห่ง ตอนนี้ฉันขูดหน้าจอสำหรับ DropBox ในการใช้ API ของพวกเขาฉันต้อง hardcode คีย์ SECRET ที่พวกเขาจัดหาให้ฉันสำหรับการตรวจสอบสิทธิ์ OAuth แต่ฉันกลัวว่ากุญแจจะไม่เป็นความลับหากใครก็ตามที่มองเห็นชัดแจ้ง เป็นไปได้ว่า 'เป็นไปได้' สำหรับบุคคลที่เป็นอันตรายที่จะใช้รหัสของฉันในการอัปโหลดไวรัสไปยังบัญชีผู้ใช้ (ที่อนุญาตให้เข้าถึงแอปของฉัน) ที่จะแพร่กระจายไปยังพีซีของพวกเขา (ถ้าพวกเขาเปิดใช้งาน พวกเขามีโฟลเดอร์ที่แชร์) และอื่น ๆ โอ้ ฉันพบคำถามที่ยังไม่ได้ตอบที่มีปัญหาเช่นเดียวกับฉัน แต่ฉันต้องการทราบโดยทั่วไปว่าจะซ่อนข้อมูลที่เป็นความลับในโครงการโอเพ่นซอร์สอย่างไร ฉันมีหนึ่งความคิด มีตัวยึดตำแหน่งในซอร์สโค้ดเช่น "<SECRET KEY HERE>" และเติมเฉพาะเมื่อสร้างไบนารี่สำหรับการเปิดตัว? (yuck!) มีความคิดที่ดีหรือไม่?

7
ภัยคุกคามความปลอดภัยทั้งหมดเกิดขึ้นจากข้อบกพร่องของซอฟต์แวร์หรือไม่
ภัยคุกคามความปลอดภัยส่วนใหญ่ที่ฉันเคยได้ยินเกิดขึ้นเนื่องจากข้อผิดพลาดในซอฟต์แวร์ (เช่นอินพุตทั้งหมดไม่ได้รับการตรวจสอบอย่างถูกต้องสติ, ล้นล้น ฯลฯ ) ดังนั้นหากเราไม่รวมการแฮ็กข้อมูลทางสังคมทั้งหมดภัยคุกคามความปลอดภัยทั้งหมดเกิดจากข้อบกพร่องหรือไม่ กล่าวอีกนัยหนึ่งหากไม่มีข้อบกพร่องจะไม่มีภัยคุกคามด้านความปลอดภัย (อีกครั้งยกเว้นความผิดพลาดของมนุษย์เช่นการเปิดเผยรหัสผ่านและอื่น ๆ ) หรือระบบสามารถใช้ประโยชน์ในรูปแบบที่ไม่ได้เกิดจากข้อบกพร่อง?
13 security  bug  hacking 

4
กลยุทธ์การใช้งานที่ดีสำหรับการห่อหุ้มข้อมูลที่ใช้ร่วมกันในซอฟต์แวร์ไปป์ไลน์
ฉันกำลังดำเนินการเกี่ยวกับการให้บริการเว็บที่มีอยู่อีกครั้ง วิธีที่ API ของบริการถูกนำไปใช้คือการมี "การประมวลผลขั้นตอน" ซึ่งมีงานที่จะดำเนินการตามลำดับ ไม่น่าแปลกใจที่งานในภายหลังอาจต้องการข้อมูลที่คำนวณโดยงานก่อนหน้านี้และในปัจจุบันวิธีที่ทำได้คือการเพิ่มเขตข้อมูลลงในคลาส "ไปป์ไลน์" ฉันกำลังคิด (และหวัง?) ว่ามีวิธีที่ดีกว่าในการแบ่งปันข้อมูลระหว่างขั้นตอนไปป์ไลน์กว่าการมีออบเจ็กต์ข้อมูลที่มีเขตข้อมูล zillion ซึ่งบางอันเหมาะสมกับขั้นตอนการประมวลผลบางอย่างและไม่ใช่กับผู้อื่น มันจะเป็นความเจ็บปวดที่สำคัญในการทำให้เธรดปลอดภัยระดับนี้ (ฉันไม่รู้ว่ามันจะเป็นไปได้) ไม่มีทางที่จะให้เหตุผลเกี่ยวกับค่าคงที่ของมัน (และเป็นไปได้ว่ามันจะไม่มี) ฉันเพจผ่านรูปแบบการออกแบบหนังสือของ Gang of Four เพื่อค้นหาแรงบันดาลใจ แต่ฉันไม่รู้สึกว่ามีวิธีแก้ปัญหาในนั้น (Memento ค่อนข้างมีวิญญาณเดียวกัน แต่ไม่มาก) ฉันดูออนไลน์ด้วยเช่นกัน แต่ครั้งที่สองที่คุณค้นหา "ไปป์ไลน์" หรือ "เวิร์กโฟลว์" ที่คุณได้รับนั้นเต็มไปด้วยข้อมูล Unix pipes หรือเอ็นจิ้นเวิร์กโฟลว์และเฟรมเวิร์กที่เป็นกรรมสิทธิ์ คำถามของฉันคือ - คุณจะแก้ไขปัญหาการบันทึกสถานะการดำเนินการของขั้นตอนการประมวลผลซอฟต์แวร์อย่างไรเพื่อให้งานในภายหลังสามารถใช้ข้อมูลที่คำนวณโดยคนก่อนหน้าได้ ฉันเดาว่าความแตกต่างที่สำคัญกับท่อ Unix คือคุณไม่เพียง แต่สนใจผลงานก่อนหน้านี้ทันที ตามที่ร้องขอบางรหัสเทียมเพื่อแสดงกรณีการใช้งานของฉัน: วัตถุ "ไปป์ไลน์บริบท" มีพวงของเขตข้อมูลที่ขั้นตอนไปป์ไลน์ที่แตกต่างกันสามารถเติม / อ่าน: public class …

2
ข้อดีและข้อเสียของการสร้างโค้ดทั้งหมดผ่านคลาสและคอมไพล์ไปยังคลาส (เช่น Java)
แก้ไข: ภาษาของฉันอนุญาตให้มีการสืบทอดหลายครั้งซึ่งแตกต่างจาก Java ฉันเริ่มออกแบบและพัฒนาภาษาโปรแกรมของฉันเองเพื่อวัตถุประสงค์ด้านการศึกษาการพักผ่อนหย่อนใจและอาจเป็นประโยชน์ ตอนแรกฉันตัดสินใจที่จะปิด Java นี่หมายความว่ารหัสทั้งหมดจะถูกเขียนในรูปแบบของคลาสและรหัสนั้นคอมไพล์ลงในคลาสซึ่งโหลดโดย VM อย่างไรก็ตามฉันได้ยกเว้นคุณสมบัติเช่นอินเทอร์เฟซและคลาสนามธรรมเพราะฉันไม่ต้องการมัน ดูเหมือนว่าพวกเขาจะบังคับกระบวนทัศน์และฉันต้องการให้ภาษาของฉันไม่ทำเช่นนั้น ฉันต้องการให้ชั้นเรียนเป็นหน่วยการรวบรวมเพราะดูเหมือนว่าจะสะดวกในการติดตั้งคุ้นเคยและฉันชอบความคิด จากนั้นฉันสังเกตเห็นว่าโดยทั่วไปแล้วฉันจะเหลืออยู่กับระบบโมดูลซึ่งสามารถใช้คลาสเป็น "เนมสเปซ" ได้โดยให้ค่าคงที่และฟังก์ชันโดยใช้staticคำสั่งหรือเป็นเทมเพลตสำหรับวัตถุที่ต้องมีอินสแตนซ์ ในภาษาอื่น ๆ ) ตอนนี้ฉันก็ยังสงสัยว่าอะไรคือ Upside และ Downside ของการมีคลาสเป็นหน่วยการคอมไพล์ นอกจากนี้ความเห็นทั่วไปเกี่ยวกับการออกแบบของฉันก็จะได้รับการชื่นชมมาก โพสต์ข้อมูลเกี่ยวกับภาษาของฉันสามารถพบได้ที่นี่: http://www.yannbane.com/2012/12/kava.html

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

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

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