ฉันเปลี่ยนจาก C ++ เป็น Java และ C # และคิดว่าการใช้เนมสเปซ / แพ็คเกจนั้นดีกว่ามากที่นั่น (มีโครงสร้างที่ดี) จากนั้นฉันก็กลับมาที่ C ++ และพยายามใช้เนมสเปซในลักษณะเดียวกัน แต่ไวยากรณ์ที่ต้องการนั้นแย่มากในไฟล์ส่วนหัว
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
สิ่งต่อไปนี้ดูแปลกสำหรับฉันเช่นกัน (เพื่อหลีกเลี่ยงการเยื้องลึก):
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
{
มีวิธีที่สั้นกว่าในการแสดงสิ่งข้างต้นหรือไม่? ฉันขาดอะไรบางอย่างเช่น
namespace MyCompany::MyModule::MyModulePart::...
{
public class MyClass
อัปเดต
โอเคบางคนบอกว่าแนวคิดการใช้งานใน Java / C # และ C ++ นั้นแตกต่างกัน จริงๆ? ฉันคิดว่าการโหลดคลาส (ไดนามิก) ไม่ใช่จุดประสงค์เดียวสำหรับเนมสเปซ (นี่เป็นมุมมองที่มีเหตุผลทางเทคนิคมาก) เหตุใดฉันจึงไม่ควรใช้เพื่อให้อ่านง่ายและจัดโครงสร้างได้เช่นนึกถึง "IntelliSense"
ขณะนี้ไม่มีตรรกะ / กาวระหว่างเนมสเปซและสิ่งที่คุณสามารถหาได้ที่นั่น Java และ C # ทำได้ดีกว่ามาก ... ทำไมต้องรวม<iostream>
และมีเนมสเปซstd
? ตกลงถ้าคุณบอกว่าตรรกะควรพึ่งพาส่วนหัวที่จะรวมถึงทำไม #include ไม่ได้ใช้ "IntelliSense" ไวยากรณ์เป็นกันเองเหมือน#include <std::io::stream>
หรือ<std/io/stream>
? ฉันคิดว่าโครงสร้างที่ขาดหายไปใน libs เริ่มต้นเป็นจุดอ่อนอย่างหนึ่งของ C ++ เมื่อเทียบกับ Java / C #
หากความเป็นเอกลักษณ์ของความขัดแย้งมักเป็นจุดเดียว (ซึ่งเป็นจุดหนึ่งของ C # และ Java ด้วย) ความคิดที่ดีคือการใช้ชื่อโครงการหรือชื่อ บริษัท เป็นเนมสเปซคุณไม่คิดอย่างนั้นเหรอ?
ในแง่หนึ่งกล่าวว่า C ++ มีความยืดหยุ่นมากที่สุด ... แต่ใคร ๆ ก็บอกว่า "อย่าทำ"? สำหรับฉันแล้วดูเหมือนว่า C ++ สามารถทำอะไรได้หลายอย่าง แต่มีไวยากรณ์ที่น่ากลัวแม้จะเป็นสิ่งที่ง่ายที่สุดในหลาย ๆ กรณีเมื่อเทียบกับ C #
อัปเดต 2
ผู้ใช้ส่วนใหญ่บอกว่าเป็นเรื่องไร้สาระที่จะสร้างรังที่ลึกกว่าสองระดับ ตกลงแล้ว Windows :: UI :: Xaml และ Windows :: UI :: Xaml :: Controls :: Primitives namespaces ในการพัฒนา Win8 ล่ะ ฉันคิดว่าการใช้เนมสเปซของ Microsoft นั้นสมเหตุสมผลและลึกกว่าแค่ 2 ระดับ ฉันคิดว่าไลบรารี / โปรเจ็กต์ที่ใหญ่กว่านั้นต้องการการซ้อนที่ลึกกว่า (ฉันเกลียดชื่อคลาสเช่น ExtraLongClassNameBecauseEveryThingIsInTheSameNameSpace ... จากนั้นคุณสามารถใส่ทุกอย่างลงในเนมสเปซส่วนกลางได้เช่นกัน)
อัปเดต 3 - สรุป
ส่วนใหญ่บอกว่า "ไม่ต้องทำ" แต่ ... แม้บูสต์จะมีการสร้างรังที่ลึกขึ้นแล้วหนึ่งหรือสองระดับ ใช่มันคือไลบรารี แต่: หากคุณต้องการโค้ดที่ใช้ซ้ำได้ - ให้ถือว่ารหัสของคุณเองเหมือนกับไลบรารีที่คุณจะให้คนอื่น ฉันยังใช้การซ้อนที่ลึกขึ้นเพื่อจุดประสงค์ในการค้นหาโดยใช้เนมสเปซ
namespace
คีย์เวิร์ดในทางที่ผิดหรือไม่?