Cái gì đó đã được gây phiền hà cho tôi trong một thời gian:Mỗi lớp có không gian tên riêng không?
Trí tuệ hiện nay là loại nên được giữ trong một không gian tên mà chỉ chứa các chức năng mà là một phần của giao diện phi thành viên của kiểu (xem C++ Coding tiêu chuẩn Sutter và Alexandrescu hoặc here) để ngăn chặn ADL kéo các định nghĩa không liên quan.
Điều này có nghĩa là tất cả các lớp phải có không gian tên riêng của chúng? Nếu chúng tôi giả định rằng một lớp có thể được tăng cường trong tương lai bằng cách thêm chức năng không phải là thành viên, thì không bao giờ có thể an toàn khi đặt hai loại trong không gian tên giống nhau. có thể can thiệp vào người kia.
Lý do tôi hỏi là không gian tên đang trở nên cồng kềnh đối với tôi. Tôi đang viết thư viện chỉ dành cho tiêu đề và tôi thấy mình đang sử dụng các tên lớp như dự án :: component :: class_name :: class_name. Việc triển khai của chúng được gọi là các hàm trợ giúp nhưng vì chúng không thể ở cùng một không gian tên, chúng cũng có để đủ điều kiện!
Edit:
Một số câu trả lời đã gợi ý rằng C++ namespace chỉ đơn giản là một cơ chế để tránh xung đột tên. Đây không phải là như vậy. Trong các hàm C++ có tham số được giải quyết bằng cách sử dụng Argument Dependent Lookup. Điều này có nghĩa là khi trình biên dịch cố gắng tìm định nghĩa hàm khớp với tên hàm, nó sẽ xem xét mọi hàm trong cùng một không gian tên như (các) kiểu tham số của nó khi tìm các ứng cử viên.
Điều này có thể có hậu quả không mong muốn, khó chịu như được nêu chi tiết trong A Modest Proposal: Fixing ADL. Các trạng thái cai trị của Sutter và Alexandrescu không bao giờ đặt một hàm trong cùng một không gian tên như một lớp trừ khi nó có nghĩa là một phần của giao diện của lớp đó. Tôi không thấy làm thế nào tôi có thể tuân theo quy tắc đó trừ khi tôi chuẩn bị cung cấp cho mọi lớp không gian tên riêng của mình.
Các đề xuất khác rất được hoan nghênh!
"Các triển khai của chúng gọi hàm trợ giúp [phải] có đủ điều kiện" - bạn có thể đặt khai báo 'sử dụng' hoặc chỉ thị bên trong một hàm chức năng, nếu điều đó có ích. –
Đối với tình yêu của tất cả mọi thứ thánh thiện, không thực thi tỷ lệ 1: 1 giữa các lớp và không gian tên. Đánh bại toàn bộ mục đích của việc có không gian tên và dẫn đến rất nhiều công việc phụ. –
@ James D: Tôi không đồng ý. Tôi nghĩ rằng nó không quá đủ xa. Chúng tôi cũng cần phải đảm bảo rằng mỗi không gian tên là chính nó trong một không gian tên. –