Hai ví dụ về các thư viện sử dụng các cấu trúc C ++ hiện đại:
- Cả thư viện eigen và armadillo (đại số tuyến tính) đều sử dụng một số cấu trúc C ++ hiện đại. Chẳng hạn, họ sử dụng cả hai mẫu biểu thức để đơn giản hóa các biểu thức số học và đôi khi có thể loại bỏ một số thời gian:
http: // eigen.tuxf Family.org
http://arma.sourceforge.net/
http://hpac.rwth-aachen.de/teaching/sem-accg-14/Armadillo.pdf (trình bày về các mẫu biểu thức trong Armadillo)
- Thư viện CGAL (hình học tính toán) sử dụng nhiều tính năng C ++ hiện đại (nó sử dụng rất nhiều mẫu và chuyên môn):
http://www.cgal.org
Chú thích:
cấu trúc C ++ hiện đại rất thanh lịch và có thể rất thú vị khi sử dụng. Đó là cả một điểm mạnh và một điểm yếu: khi sử dụng chúng, thật hấp dẫn khi thêm một vài lớp mẫu / chuyên môn / lambdas mà cuối cùng đôi khi bạn nhận được nhiều "quản trị" hơn mã hiệu quả trong chương trình (nói cách khác, chương trình của bạn "nói" về vấn đề nhiều hơn là mô tả giải pháp). Tìm sự cân bằng phù hợp là rất tinh tế. Kết luận: người ta cần theo dõi sự phát triển của tỷ lệ "tín hiệu / nhiễu" trong mã bằng cách đo :
- Có bao nhiêu dòng mã trong chương trình?
- Có bao nhiêu lớp / mẫu?
- thời gian chạy
- tiêu thụ bộ nhớ?
Tất cả mọi thứ làm tăng hai cái đầu tiên có thể được coi là một chi phí (bởi vì nó có thể làm cho chương trình khó hiểu và duy trì hơn), mọi thứ làm giảm hai cái cuối cùng là một lợi ích .
Ví dụ, giới thiệu một khái niệm trừu tượng (một lớp học ảo hoặc một template) mã yếu tố có thể và làm cho chương trình đơn giản ( tăng ), nhưng nếu nó không bao giờ derivated / instanced một lần duy nhất, sau đó nó giới thiệu một chi phí không có liên quan tăng (một lần nữa nó được tinh tế bởi vì lợi ích có thể đến sau trong quá trình phát triển của chương trình trong tương lai, do đó không có "quy tắc vàng").
Sự thoải mái của lập trình viên cũng là một yếu tố quan trọng cần được tính đến trong số dư chi phí / lợi nhuận: với quá nhiều mẫu, thời gian biên dịch có thể tăng đáng kể và thông báo lỗi trở nên khó phân tích.
Xem thêm
Ở mức độ nào thì chung và lập trình meta sử dụng các mẫu C ++ hữu ích trong khoa học tính toán?