ฉันเห็นด้วยกับคนอื่น ๆ - มันกำลังขอการปะทะกันของชื่อความคลุมเครือแล้วความจริงก็คือมันไม่ชัดเจน ในขณะที่ฉันเห็นการใช้งานการusing
ตั้งค่าส่วนตัวของฉันคือ จำกัด ฉันจะพิจารณาสิ่งที่คนอื่นชี้:
หากคุณต้องการค้นหาชื่อฟังก์ชั่นที่อาจเป็นชื่อสามัญ แต่คุณต้องการค้นหาในstd
เนมสเปซเท่านั้น (หรือกลับด้าน - คุณต้องการเปลี่ยนการโทรทั้งหมดที่ไม่ได้อยู่ในเนมสเปซstd
, เนมสเปซX
... ), แล้วคุณจะเสนอให้ทำอย่างไร
คุณสามารถเขียนโปรแกรมเพื่อทำมันได้ แต่มันจะดีกว่าไหมถ้าคุณใช้เวลาทำงานกับโครงการของคุณเองแทนที่จะเขียนโปรแกรมเพื่อดูแลโครงการของคุณ?
โดยส่วนตัวแล้วฉันไม่รังเกียจstd::
คำนำหน้า ฉันชอบรูปลักษณ์ที่มากกว่าไม่มี ฉันไม่รู้ว่าเป็นเพราะชัดเจนหรือไม่และบอกกับฉันว่า "นี่ไม่ใช่รหัสของฉัน ... ฉันใช้ไลบรารี่มาตรฐาน" หรือถ้าเป็นอย่างอื่น แต่ฉันคิดว่ามันดูดีกว่า นี่อาจจะแปลกเพราะฉันเพิ่งได้รับใน C ++ (ใช้แล้วและยังคงทำ C และภาษาอื่น ๆ นานกว่านี้และ C เป็นภาษาที่ฉันโปรดปรานตลอดกาลเหนือการชุมนุม)
มีสิ่งหนึ่งที่อื่นแม้ว่ามันจะค่อนข้างเกี่ยวข้องกับข้างต้นและสิ่งที่คนอื่นชี้ให้เห็น แม้ว่านี่อาจเป็นวิธีปฏิบัติที่ไม่ดี แต่บางครั้งฉันก็จองstd::name
รุ่นและชื่อไลบรารีมาตรฐานสำหรับการใช้งานเฉพาะโปรแกรม ใช่แล้วสิ่งนี้อาจกัดคุณและกัดคุณอย่างหนัก แต่ทุกอย่างลงมาที่ฉันเริ่มโครงการนี้ตั้งแต่เริ่มต้นและฉันเป็นโปรแกรมเมอร์คนเดียวสำหรับมัน ตัวอย่าง: ฉันเกินและเรียกมันว่าstd::string
string
ฉันมีสิ่งที่เป็นประโยชน์เพิ่มเติม ฉันทำบางส่วนเพราะแนวโน้ม C และ Unix (+ Linux) ของฉันที่มีต่อชื่อตัวพิมพ์เล็ก
นอกจากนั้นคุณสามารถมีชื่อแทนเนมสเปซ นี่คือตัวอย่างของที่ที่มีประโยชน์ที่อาจไม่ได้รับการอ้างอิง ฉันใช้มาตรฐาน C ++ 11 และเฉพาะกับ libstdc ++ มันไม่ได้รับstd::regex
การสนับสนุนที่สมบูรณ์ แน่นอนว่ามันคอมไพล์ แต่มันมีข้อผิดพลาดตามบรรทัดของมันซึ่งเป็นข้อผิดพลาดในตอนท้ายของโปรแกรมเมอร์ แต่มันก็ขาดการใช้งาน
ดังนั้นนี่คือวิธีที่ฉันแก้ไขมัน ติดตั้ง Regex ของ Boost และเชื่อมโยงระบบจากนั้นฉันทำสิ่งต่อไปนี้เพื่อที่ว่าเมื่อ libstdc ++ ได้ติดตั้งอย่างสมบูรณ์ฉันต้องการเพียงลบบล็อกนี้และรหัสยังคงเหมือนเดิม:
namespace std
{
using boost::regex;
using boost::regex_error;
using boost::regex_replace;
using boost::regex_search;
using boost::regex_match;
using boost::smatch;
namespace regex_constants = boost::regex_constants;
}
ฉันจะไม่โต้แย้งว่ามันเป็นความคิดที่ไม่ดีหรือไม่ อย่างไรก็ตามฉันจะเถียงว่ามันทำให้มันสะอาดสำหรับโครงการของฉันและในเวลาเดียวกันทำให้เจาะจง: จริงฉันต้องใช้ Boost แต่ฉันใช้มันเหมือน libstdc ++ ในที่สุดจะมีมัน ใช่เริ่มโครงการของคุณเองและเริ่มต้นด้วยมาตรฐาน (... ) ที่จุดเริ่มต้นไปไกลมากด้วยการช่วยบำรุงรักษาพัฒนาและทุกอย่างที่เกี่ยวข้องกับโครงการ!
เพียงชี้แจงบางสิ่งบางอย่าง: ฉันไม่คิดว่าเป็นความคิดที่ดีที่จะใช้ชื่อของคลาส / สิ่งใดก็ตามในSTLโดยเจตนาและเฉพาะเจาะจงมากกว่า สตริงเป็นข้อยกเว้น (ไม่สนใจแรกเหนือหรือที่สองที่นี่ถ้าคุณต้องปุน) สำหรับฉันเพราะฉันไม่ชอบความคิดของ 'สตริง'
ตามที่เป็นอยู่ฉันยังคงมีอคติต่อ C และมีอคติต่อ C ++ มาก สิ่งที่ฉันทำงานอยู่เหมาะกับ C มากขึ้น (แต่มันเป็นการออกกำลังกายที่ดีและเป็นวิธีที่ดีที่จะทำให้ตัวเอง a. เรียนรู้ภาษาอื่นและ b. พยายามอย่าลำเอียงกับวัตถุ / คลาส / ฯลฯ ที่น้อยลง เป็นคนใจแคบน้อยยอมรับน้อยและยอมรับมากขึ้น) แต่สิ่งที่มีประโยชน์คือสิ่งที่บางคนแนะนำไปแล้ว: ฉันใช้ลิสต์ (มันค่อนข้างธรรมดาใช่มั้ย?) และเรียงลำดับ (สิ่งเดียวกัน) กับชื่อที่สองที่จะทำให้เกิดการปะทะกันของชื่อหากฉันต้องทำเช่นusing namespace std;
นั้น ด้วยเหตุนี้ฉันจึงชอบที่จะมีความเฉพาะเจาะจงในการควบคุมและรู้ว่าถ้าฉันตั้งใจจะให้มันเป็นมาตรฐานการใช้งานแล้วฉันจะต้องระบุมัน พูดง่าย ๆ : ไม่ได้รับอนุญาต
และในขณะที่สำหรับการทำ Boost std
เป็นส่วนหนึ่งของ ฉันทำเพื่อบูรณาการในอนาคตและ - อีกครั้งผมยอมรับอย่างเต็มที่นี้เป็นอคติ - boost::regex:: ...
ฉันไม่คิดว่ามันเป็นเรื่องน่าเกลียด แน่นอนว่าเป็นอีกสิ่งหนึ่งสำหรับฉัน มีหลายสิ่งใน C ++ ที่ฉันยังไม่ได้ยอมรับอย่างเต็มที่ในรูปลักษณ์และวิธีการ (ตัวอย่างอื่น: เทมเพลต variadic และอาร์กิวเมนต์ var [แม้ว่าฉันยอมรับเทมเพลต Variadic นั้นมีประโยชน์มาก!]) แม้แต่คนที่ฉันยอมรับก็เป็นเรื่องยากและฉันก็ยังมีปัญหากับพวกเขา