Tôi đã chuyển từ C ++ sang Java và C # và nghĩ rằng việc sử dụng không gian tên / gói ở đó tốt hơn nhiều (có cấu trúc tốt). Sau đó, tôi quay lại C ++ và cố gắng sử dụng không gian tên theo cách tương tự nhưng cú pháp yêu cầu rất khủng khiếp trong tệp tiêu đề.
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
Điều sau có vẻ lạ đối với tôi (để tránh thụt lề sâu):
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
{
Có cách nào ngắn hơn để diễn đạt điều trên không? Tôi đang thiếu một cái gì đó như
namespace MyCompany::MyModule::MyModulePart::...
{
public class MyClass
Cập nhật
Ok, một số người nói rằng khái niệm sử dụng trong Java / C # và C ++ là khác nhau. Có thật không? Tôi nghĩ rằng tải lớp (động) không phải là mục đích duy nhất cho không gian tên (đây là một quan điểm lý luận rất kỹ thuật). Tại sao tôi không nên sử dụng nó để dễ đọc và cấu trúc, ví dụ: hãy nghĩ đến "IntelliSense".
Hiện tại, không có logic / keo dán giữa không gian tên và những gì bạn có thể tìm thấy ở đó. Java và C # làm điều này tốt hơn nhiều ... Tại sao bao gồm <iostream>
và có không gian tên std
? Được rồi, nếu bạn nói logic nên dựa vào tiêu đề để bao gồm, tại sao #include không sử dụng cú pháp thân thiện "IntelliSense" như #include <std::io::stream>
hoặc <std/io/stream>
? Tôi nghĩ rằng việc thiếu cấu trúc trong libs mặc định là một điểm yếu của C ++ so với Java / C #.
Nếu tính duy nhất đối với các xung đột khao khát là một Điểm (cũng là một điểm của C # và Java) thì một ý tưởng hay là sử dụng tên dự án hoặc tên công ty làm không gian tên, bạn có nghĩ vậy không?
Một mặt người ta nói C ++ là linh hoạt nhất ... nhưng mọi người đều nói "đừng làm điều này"? Đối với tôi, có vẻ như C ++ có thể làm được nhiều thứ nhưng có một cú pháp khủng khiếp ngay cả đối với những thứ dễ dàng nhất trong nhiều trường hợp so với C #.
Cập nhật 2
Hầu hết người dùng nói rằng việc tạo lồng ghép sâu hơn hai Cấp độ là vô nghĩa. Ok, vậy còn Windows :: UI :: Xaml và Windows :: UI :: Xaml :: Controls :: Các không gian tên nguyên thủy trong phát triển Win8 thì sao? Tôi nghĩ việc sử dụng không gian tên của Microsoft có ý nghĩa và nó thực sự sâu sắc hơn chỉ là 2 Cấp. Tôi nghĩ rằng các thư viện / dự án lớn hơn cần lồng ghép sâu hơn (tôi ghét các tên lớp như ExtraLongClassNameBecauseEveryThingIsInTheSameNameSpace ... thì bạn cũng có thể đặt mọi thứ vào không gian tên chung).
Cập nhật 3 - Kết luận
Hầu hết nói "không làm điều đó", nhưng ... thậm chí tăng có một lồng sâu hơn sau đó một hoặc hai cấp độ. Đúng, nó là một thư viện nhưng: Nếu bạn muốn mã có thể sử dụng lại - hãy coi mã của chính bạn như một thư viện mà bạn sẽ cung cấp cho người khác. Tôi cũng sử dụng lồng sâu hơn cho mục đích khám phá bằng cách sử dụng không gian tên.
namespace
từ khóa không?