2010-03-05 24 views

Trả lời

12

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.

+0

+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. –

+0

@ 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. –

4

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ó.

0

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ì.

1

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::foomylib::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.

1

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; 
    } 
} 
2

Đố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ế.

Các vấn đề liên quan