2009-02-24 37 views
7

Có nhiều nơi tăng cường nơi tôi nhìn thấy một lớp học được tạo khuôn mẫu và không thể không nghĩ tại sao người viết nó sử dụng các mẫu.Tại sao tăng quá nhiều templated?

Ví dụ: lớp mutex (es). Tất cả các khái niệm mutex được thực hiện như là các khuôn mẫu mà người ta có thể chỉ đơn giản là tạo ra một vài lớp cơ sở hoặc các lớp trừu tượng với một giao diện phù hợp với khái niệm.

chỉnh sửa sau khi trả lời: Tôi đã nghĩ về chi phí của các chức năng ảo nhưng đôi khi không đáng để cho đi rất ít hình phạt về hiệu suất để hiểu rõ hơn? Tôi có nghĩa là đôi khi (đặc biệt là với tăng) nó thực sự khó hiểu mã templated và giải mã lỗi trình biên dịch như là kết quả của việc lạm dụng các mẫu.

+0

sẽ bea câu hỏi tốt cho anh chàng này: http://stackoverflow.com/users/5597/anthony-williams (tác giả của boost.thread): p –

+0

Triết lý chính của cộng đồng C++ là "Bạn chỉ nhận được những gì bạn yêu cầu". Dự án Boost đang cố gắng, giống như STL, theo triết lý đó bằng cách thiết kế tất cả các thư viện bằng cách sử dụng các mẫu. Có một chi phí mặc dù, như bạn đề cập đến: sự hiểu biết đôi khi bị. Nếu bạn muốn một thư viện, bạn có thể dễ dàng hiểu hơn, có lẽ bạn nên có một cái nhìn tại thư viện Qt. Nó chứa nhiều những gì Boost làm, và nhiều hơn nữa! Theo tôi, thiết kế của Qt cho phép phát triển quy mô lớn C++, thứ gì đó Boost hoàn toàn thiếu. –

Trả lời

20

Mẫu có thể được tối ưu hóa cao tại thời gian biên dịch mà không cần các chức năng ảo. Rất nhiều thủ thuật mẫu có thể được coi là tính đa hình thời gian biên dịch. Vì bạn biết tại thời gian biên dịch mà hành vi bạn muốn, tại sao bạn nên trả tiền cho một cuộc gọi chức năng ảo mỗi khi bạn sử dụng lớp. Là một phần thưởng, rất nhiều mã templated có thể dễ dàng được sắp xếp để loại bỏ ngay cả những chức năng cơ bản nhất gọi trên không.

Ngoài ra, các mẫu trong C++ cực kỳ mạnh mẽ và linh hoạt - chúng đã được hiển thị là ngôn ngữ hoàn chỉnh turing theo đúng nghĩa của chúng. Có một số điều dễ thực hiện với các mẫu đòi hỏi nhiều công việc hơn với tính đa hình thời gian chạy.

3

Mẫu cho phép bạn thực hiện phiên bản chung của thuật toán. Phiên bản chung của vùng chứa. Bạn không còn phải lo lắng về các loại và những gì bạn sản xuất không còn cần phải gắn với một loại. Boost là một bộ sưu tập các thư viện cố gắng giải quyết nhu cầu của nhiều người sử dụng C++ trong cuộc sống hàng ngày của họ.

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