Buku C ++ Templates: The Complete Guide , (c) 2002, terlihat sangat menarik bagi saya, tetapi karena sudah berusia 12 tahun, saya khawatir buku itu mungkin sudah ketinggalan zaman. Ada beberapa ulasan Amazon yang sangat disukai, baru-baru ini ditunggu setahun yang lalu, dan saya tidak melihat judul terbaru lainnya tentang templat C ++. Adakah yang tahu apakah sebuah buku tentang templat yang diterbitkan pada tahun 2002 (sebagai lawan dari sebuah buku khusus tentang STL) akan memiliki sintaks atau konsep yang telah digantikan atau ditambahkan oleh, katakanlah, C ++ 11?
Berikut ini dari deskripsi buku Amazon :
Template adalah salah satu fitur paling kuat dari C ++, tetapi mereka terlalu sering diabaikan, disalahpahami, dan disalahgunakan. C ++ Templates: Panduan Lengkap memberikan arsitek dan insinyur perangkat lunak dengan pemahaman yang jelas tentang mengapa, kapan, dan bagaimana menggunakan templat untuk membangun dan memelihara perangkat lunak yang lebih bersih, lebih cepat, dan lebih cerdas dengan lebih efisien.
C ++ Templat dimulai dengan tutorial mendalam tentang konsep dasar dan fitur bahasa. Sisa buku ini berfungsi sebagai referensi komprehensif, berfokus pertama pada detail bahasa, kemudian pada berbagai teknik pengkodean, dan akhirnya pada aplikasi canggih untuk templat. Contoh-contoh yang digunakan di seluruh buku menggambarkan konsep abstrak dan menunjukkan praktik terbaik.
Pembaca belajar
- Perilaku persis template
- Cara menghindari jebakan yang terkait dengan templat
- Idiom dan teknik, dari dasar ke yang sebelumnya tidak berdokumen
- Cara menggunakan kembali kode sumber tanpa mengancam kinerja atau keamanan
- Cara meningkatkan efisiensi program C ++
- Cara menghasilkan perangkat lunak yang lebih fleksibel dan dapat dirawat
Jawaban:
Diperbarui (2016/08/24)
Artikel yang disarankan dengan fokus pada C ++ 11:
Pengantar konsep SFINAE C ++: kompilasi waktu integrasi anggota kelas (Jean Guegant)
Sebagai pelajar dari C ++ Template Metaprogramming beberapa bulan yang lalu, saya masih akan merekomendasikan untuk membaca buku ini.
Itu tidak termasuk C ++ 11, tetapi menjabarkan sintaks dan spesifikasi C ++ tentang bagaimana kompiler harus memproses kode templat. Buku ini mencakup banyak sudut yang kurang dikenal yang akan menjadi penting jika Anda perlu menggunakan template C ++ secara substansial, terlepas dari apakah metaprogramming terlibat atau tidak.
Bagian yang hilang dari C ++ 11 adalah:
is_*
akan ditampilkan.decltype
. http://en.cppreference.com/w/cpp/language/decltypedeclval
. http://en.cppreference.com/w/cpp/utility/declvalmove
http://en.cppreference.com/w/cpp/utility/moveforward
http://en.cppreference.com/w/cpp/utility/forwardAda sebuah konstruksi yang akan Anda lihat banyak dalam kode yang disisipkan ke Stackoverflow:
std::enable_if
. Namun, dalam praktiknya, saya menemukan ini cukup sulit untuk digunakan, karena Aturan Satu-Definisi dan SFINAE. Inilah mengapa buku ini penting, karena membahas dasar-dasarnya.Jika Anda menggunakan template C ++ secara substansial di pustaka lintas platform, Anda perlu menguji-kompilasi kode Anda di kompiler yang berbeda. Ini karena setiap kompiler memiliki tingkat kepatuhan yang berbeda terhadap spesifikasi C ++. Kode yang mengkompilasi dengan baik pada satu dapat ditolak oleh yang lain, dan kadang-kadang kompiler yang menerimanya adalah salah satu yang melanggar spesifikasi.
Inilah catatan bacaan saya ketika saya membaca buku ini. Semoga bermanfaat.
Catatan membaca buku - Template C ++ - Panduan Lengkap (2003)
Bab 5 dan Bab 6 - Kedua bab ini sangat menyedihkan. Anda mungkin ingin melewatinya dan kemudian kembali ketika Anda siap secara emosional untuk menggunakan template.
Bagian II (Ch 8 - Ch ???) Bagian barang canggih.
Bab 8 - Lebih banyak aturan
Bab 8.3.1 (Halaman 106 dalam Pencetakan ke-12) menyebutkan SFINAE untuk pertama kalinya.
Bab 11 - Potongan Template Argumen
Bab 12.4 dan seterusnya - Spesialisasi templat kelas sebagian.
Bagian III (Ch 17 - Ch ???) Metaprogramming.
Ch 17 - Dimulai dengan pemrograman fungsional pengantar.
Aplikasi. A.3 - Aturan Satu Definisi (ODR) secara rinci.
sumber
constexpr
dan karenanya akan merekomendasikan TMP untuk semua metaprogramming, bahkan kasus-kasus di manaconstexpr
fungsi dan tipe akan jauh lebih cocok.