Dua contoh perpustakaan yang menggunakan konstruksi C ++ modern:
- Baik perpustakaan eigen dan armadillo (aljabar linier) menggunakan beberapa konstruksi C ++ modern. Misalnya, mereka menggunakan kedua templat ekspresi untuk menyederhanakan ekspresi aritmatika dan terkadang dapat menghilangkan beberapa temporer:
http://eigen.tuxfamily.org
http://arma.sourceforge.net/
http://hpac.rwth-aachen.de/teaching/sem-accg-14/Armadillo.pdf (presentasi tentang templat ekspresi di Armadillo)
- Pustaka CGAL (geometri komputasi) menggunakan banyak fitur C ++ modern (ini sangat menggunakan templat dan spesialisasi):
http://www.cgal.org
catatan:
konstruksi C ++ modern sangat elegan dan bisa sangat menyenangkan untuk digunakan. Ini adalah titik kuat dan juga kelemahan: ketika menggunakannya, sangat menggoda untuk menambahkan beberapa lapisan templat / spesialisasi / lambda sehingga pada akhirnya Anda kadang-kadang mendapatkan lebih banyak "administrasi" daripada kode efektif dalam program (dengan kata lain, program Anda "berbicara" lebih banyak tentang masalah daripada menjelaskan solusinya). Menemukan keseimbangan yang tepat sangat halus. Kesimpulan: seseorang perlu melacak evolusi rasio "sinyal / noise" dalam kode dengan mengukur :
- berapa baris kode dalam program ini?
- berapa kelas / templat?
- waktu berjalan ?
- konsumsi memori?
Segala sesuatu yang meningkatkan dua yang pertama dapat dianggap sebagai biaya (karena dapat membuat program lebih sulit untuk dipahami dan dipelihara), segala sesuatu yang mengurangi dua yang terakhir adalah keuntungan .
Sebagai contoh, memperkenalkan abstraksi (kelas virtual atau templat) dapat memfaktorkan kode dan membuat program lebih sederhana ( mendapatkan ), tetapi jika tidak pernah diturunkan / di-instanc sekali saja, maka ia memperkenalkan biaya tanpa keuntungan terkait (sekali lagi itu adalah halus karena keuntungan mungkin datang kemudian dalam evolusi program di masa depan, oleh karena itu tidak ada "aturan emas").
Kenyamanan pemrogram juga merupakan faktor penting yang harus diperhitungkan dalam keseimbangan biaya / perolehan: dengan terlalu banyak templat, waktu kompilasi dapat meningkat secara signifikan, dan pesan kesalahan menjadi sulit diurai.
Lihat juga
Sejauh mana generik dan meta-pemrograman menggunakan template C ++ bermanfaat dalam ilmu komputasi?