Bạn sẽ đặt các hằng số toàn cục vào một ứng dụng C++ ở đâu? Ví dụ bạn sẽ đặt chúng trong một lớp học? Trong một cấu trúc?Bạn nên đặt các hằng số toàn cục vào chương trình C++ ở đâu?
Trả lời
Tôi sẽ sử dụng một không gian tên cho các hằng số toàn cục không được liên kết chặt chẽ với một lớp đơn lẻ. Trong trường hợp sau, tôi sẽ đặt chúng trong lớp đó.
Thực sự hằng số (cấp ứng dụng) toàn cầu phải ở trong không gian tên của ứng dụng (miễn là ứng dụng của bạn nằm bên trong không gian tên của chính nó). Đối với hằng số mô-đun, không gian tên riêng của mô-đun là nơi tự nhiên.
Cách tiếp cận tốt nhất là đặt chúng vào cùng một không gian tên nơi chúng thuộc về. Một ứng dụng C++ lớn thường sẽ có nhiều mô đun, mỗi mô-đun có bộ hằng số riêng của nó. Mỗi mô-đun phải ở trong một không gian tên, với các hằng số của nó trong nó.
Một tùy chọn đặt chúng vào lớp là thành viên không tĩnh và đặt đối tượng thuộc loại đó vào hàm main() của bạn. Điều đó đơn giản hóa làm cho chúng không phải là hình cầu khi bạn phát hiện ra rằng bạn cần, vì bất kỳ lý do gì.
Như một quy tắc đơn giản, tôi đặt chúng vào bất kỳ vị trí nào dẫn đến chúng không có tiền tố kiểu C gây kích ứng. Ví dụ:
Ví dụ: nếu hằng số của bạn có tên là mylib_foo
, mylib_bar
, thì chúng phải nằm trong không gian tên mylib và là mylib::foo
và mylib::bar
.
Nếu không gian tên mylib chứa hằng số circle_max_radius
, sphere_max_radius
, rectangle_max_width
, rectangle_max_height
, trong đó Vòng tròn, Hình cầu và Hình chữ nhật là các lớp, thì chúng phải là thành viên lớp tĩnh.
max
không phải là tiền tố "gây khó chịu", đây là tiền tố hợp lý vì đó là công cụ sửa đổi mô tả thay vì sở hữu ("bán kính tối đa của vòng kết nối"). Vì vậy, nó có thể ở lại.
Một cách có thể là ues một lớp có hàm thành viên tĩnh trả về hằng số. Tôi sử dụng điều này khi tôi cần hằng số có nhiều hơn các loại cơ bản hoặc các đối tượng đơn giản.
class Constant
{
public:
static const ComplexObject& getComplexObject()
{
static ComplexObject constObj = createComplexObject();
return constObj;
}
private:
static ComplexObject createComplexObject()
{
ComplexObject obj;
obj.setValue(1);
return obj;
}
}
Đối với hằng địa phương vào một tập tin cpp duy nhất, phương pháp tốt nhất là tuyên bố chúng trong một không gian tên vô danh như vậy:
namespace {
int const seconds_per_minute = 60;
int const minutes_per_hour = 60;
}
Đối với hằng số mà cần phải được hiển thị cho toàn bộ chương trình, giải pháp đơn giản nhất là tạo một không gian tên (có tên) cho chúng và đặt nó vào một tệp tiêu đề.
Nếu có (hoặc có thể) một số thao tác đi cùng với chúng, thay vào đó bạn có thể tạo một số singleton class cho chúng. Ví dụ, các chương trình của tôi có một lớp singleton có tên là "cấu hình" đọc hằng số khởi động (như địa chỉ IP và những thứ tôi không muốn mã hóa cứng) từ tệp cấu hình hoặc sổ đăng ký hoặc thứ gì đó như thế.
- 1. Tôi đặt tệp hằng số cho Codeigniter (PHP) ở đâu?
- 2. Mục tiêu C - Bạn xử lý các biến tĩnh toàn cục ở đâu?
- 3. bạn đặt ivysettings.xml ở đâu?
- 4. Nên đặt beans.xml ở đâu?
- 5. Tôi nên xác định các hàm toàn cục trong ExtJS 4 MVC ở đâu?
- 6. Tôi nên đặt scriptmanager ở đâu
- 7. Tôi nên đặt các tệp cấu hình IPython ở đâu?
- 8. Bạn đặt câu lệnh SQL vào các dự án C# ở đâu?
- 9. Bạn đặt dữ liệu ứng dụng toàn cầu vào ứng dụng iPhone ở đâu?
- 10. Các chức năng Symfony "toàn cầu" nên được đặt ở đâu?
- 11. Tôi nên đặt plugin .vim ở đâu?
- 12. Ubuntu lưu trữ các chương trình đã cài đặt ở đâu?
- 13. Tôi nên đặt các chức năng linh tinh vào một dự án .NET ở đâu?
- 14. Tôi có thể tìm các hằng số ký tự trong C# ở đâu?
- 15. Tôi nên đặt chỗ tĩnh tĩnh công cộng ở đâu?
- 16. Mục tiêu-C typedef enum trong các hằng số toàn cục tập tin
- 17. Các chức năng tiện ích ở đâu nên ở Django?
- 18. Tôi nên đặt mocks của mình ở đâu?
- 19. Các chương trình Thêm/Loại bỏ kéo dữ liệu vào cột "Đã cài đặt trên" ở đâu?
- 20. Tôi nên đặt lớp cơ sở trống ở đâu?
- 21. MEF: Tôi nên đặt bộ phận sắp xếp ở đâu?
- 22. Trình lập trình Java kỳ cựu nên bắt đầu ở đâu để làm chủ C?
- 23. Biến cục bộ tĩnh ở đâu
- 24. C#, Ninject: Bạn đặt hạt nhân và mô-đun của bạn ở đâu?
- 25. Node.js đặt các tệp của nó ở đâu?
- 26. Chương trình 'man' dành cho Windows ở đâu (Chương trình mở trang người dùng UNIX)?
- 27. Mẫu jQuery - tôi nên đặt chúng ở đâu?
- 28. Tôi nên đặt AngularJS Nhà máy & Dịch vụ ở đâu?
- 29. Tôi bắt đầu học chương trình bot ở đâu?
- 30. Tôi có thể tìm danh sách các hằng số API cửa sổ ở đâu
+1, nhưng đối với hằng số cấp mô-đun không cần hiển thị cho khai báo lớp, tôi sử dụng không gian tên anonomyous. –
@ T.E.D. Phụ thuộc vào "mô-đun" của bạn là gì - tôi đã nghĩ về một đơn vị lớn hơn bao gồm một số lớp. Nếu bằng "module" bạn có nghĩa là một đơn vị biên dịch đơn, tôi hoàn toàn đồng ý với bạn. –