CRTP có được sử dụng nhiều không? và tại sao nó lại / không? [đóng cửa]


11

Tôi đang suy nghĩ về mẫu tò mò định kỳ .

Tôi thấy nó khá hữu ích và nó có thể điều chỉnh khá tốt cho nhiều nhiệm vụ. Nhưng tôi phải thừa nhận, tôi không thấy nhiều mã CRTP trong tự nhiên.

Có khó nắm bắt không? Là các chức năng ảo tổng thể dễ dàng hơn? Không nên sử dụng nó cho 90% trường hợp từ khóa ảo xuất hiện?

Câu trả lời:


8

Một thực tế đơn giản là nhiều người, nếu không phải hầu hết, người dùng C ++ khó có thể nắm bắt được điều đó vectortốt hơn mallocfree, vì vậy số người không chỉ đánh giá cao mà còn thực hiện siêu lập trình mẫu nâng cao không cao lắm. Điều này ngụ ý rằng ngay cả khi nó tốt cho 90% các tình huống, bạn sẽ thấy nó ít hơn nhiều, đơn giản là vì mọi người không biết về nó hoặc cách sử dụng nó.

Tuy nhiên, các chức năng ảo thực sự có lợi thế, cụ thể là các chức năng ảo dễ sử dụng hơn nhiều so với CRTP. Các mẫu C ++ nổi tiếng là hư hỏng về hầu hết mọi thứ và mọi thứ, và mô hình bao gồm hút bóng.

Tuy nhiên, chúng [chức năng ảo] chậm hơn rõ rệt và kém mạnh mẽ hơn. Ví dụ, tôi hiện đang viết mã bằng CRTP, nơi bạn thừa hưởng quá tải toán tử để sử dụng với các mẫu biểu thức. Không có cách nào các chức năng ảo có thể làm cho nó hoạt động.


1
Có phải hơi trớ trêu rằng chính tính năng ngôn ngữ mà CRTP sử dụng để tránh việc sử dụng 'ảo' là không hợp lý về 'hầu như' mọi thứ và mọi thứ?
Kaiserludi

6

WTL sử dụng CRTP. Trình duyệt Chromium là một ví dụ nổi tiếng về phần mềm sử dụng WTL, vì vậy tôi muốn nói rằng nó được sử dụng "trong tự nhiên".

Khoảng 90%? Đó chắc chắn là một lời nói quá. Bạn đã bao giờ sử dụng một thùng chứa các đối tượng đa hình? Đó là cách sử dụng đa hình rất phổ biến và bạn không thể làm điều đó với CRTP vì Base<DerivedA>không giống như Base<DerivedB>.


-5

Đây là lý do tại sao nó không được sử dụng rộng rãi hơn:

  1. Đó là một hack
  2. Là một hack, nó không đảm bảo bạn không gặp rắc rối khi bạn sử dụng nó. Các công cụ OO bình thường đã được sử dụng bởi số lượng lớn các dự án và được tìm thấy để hoạt động đúng / các vấn đề đã được biết đến, CRTP chỉ được tìm thấy trong một số lượng nhỏ các dự án và không có sẵn dữ liệu
  3. không có lý do chính đáng để sử dụng nó - hầu hết các lý do được chỉ là không hợp lệ
  4. nó có thể làm cho một số điều phức tạp hơn

11
Nó là chắc chắn nhất không phải là một hack. Hành vi được xác định rất rõ, và có rất nhiều sử dụng nó.
DeadMG

5
Đúng, toàn bộ STL là một hack lớn.
Abyx

bạn có thể chỉnh sửa câu trả lời của bạn và giải thích, tại sao nó là một hack?
Nick
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.