2011-06-29 26 views
6

Tôi đang viết một trình tạo ID duy nhất có các chiến lược khác nhau để tạo Id, là duy nhất thông qua một ngày hoặc một tuần hoặc một tháng. Tôi không muốn tạo phân cấp các lớp với cơ chế chức năng ảoBạn có nên tạo mẫu dựa trên enums không?

Làm điều gì đó giống như đoạn mã dưới đây, một ý tưởng hay? Bất kỳ đề xuất nào?

enum Duration { Day, Week, Month }; 

template <Duration d> 
class IDGenerator 
{ 
    generateId(); 
} 
+1

Điều đó sẽ hoạt động hoàn toàn tốt, các mệnh đề 'if' tương ứng sẽ được tối ưu hoàn toàn trong trường hợp này. Do lưu ý rằng nó không phải là 100% mạnh mẽ như chuyên lớp mẫu trên một loại (mặc dù nhiều/hầu hết mọi người sẽ thích "ít quyền lực" ở đây). – Damon

+0

Xác định "ý tưởng hay". –

Trả lời

5

Có nó chấp nhận được và sẽ làm việc chỉ nộp nếu thời gian biên dịch đa hình là đủ cho bạn - bạn sẽ tiết kiệm cho các cuộc gọi ảo và điều đó sẽ cho phép coptimizations biên dịch tốt hơn.

-1

Vì nó đứng ở trên, nó không cần thiết gây nhầm lẫn. Chỉ cần tạo ba lớp với các tên khác nhau.

+0

Và thêm một lớp mỗi khi anh ta mở rộng enum bằng, ví dụ: 'Giờ',' Năm' và cứ tiếp tục như vậy? – aioobe

+0

@Space: Nếu điều đó gây nhầm lẫn, anh ta chỉ tạo typedefs như 'typedef IDGenerator DayIDGenerator' vv Không cần tạo ba lớp với các tên khác nhau! – Nawaz

+0

@aioobe: Mẫu sẽ chỉ trợ giúp nếu anh ta có triển khai mặc định hợp lý. Nó thực sự phụ thuộc vào cách 'generateId()' được thực thi. Anh ta có thể chỉ làm cho 'Duration' một tham số của hàm đó. –

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