“C ++ Templates: The Complete Guide” (c) 2002 - terkini dengan C ++ 11?

10

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
Bab
sumber
2
Karena bahasa C ++ itu sendiri hanya berubah perlahan (perubahan besar hanya dilakukan setiap 10 tahun) dan sebagian besar tetap kompatibel, buku-buku tentang C ++ juga tidak menua dengan cepat.
Bart van Ingen Schenau

Jawaban:

12

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:


Ada 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)

  • Ch 2.5 - Templat Fungsi - Ringkasan
    • Resolusi berlebihan, dan praktik terbaik
  • Bab 3.3 - Spesialisasi Template Kelas
  • Ch 3.4 - Spesialisasi Parsial
    • Ambiguitas (kesalahan ODR), dan cara mengatasinya. ODR = Aturan Satu Definisi
  • Bab 4.3 - Batasan untuk Parameter Templat Non-tipe
    • Contoh: string literal dengan tautan eksternal
  • 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

    • Untuk seorang programmer yang sudah terbiasa dengan seluruh Ch 3 (templat kelas - dasar-dasar), Ch 8.1 dan 8.2 harus dibaca segera setelah Ch 3, karena aturan tambahan sama pentingnya dan relevan dengan aturan dasar. Ini akan menghemat rasa sakit.
  • Bab 8.3.1 (Halaman 106 dalam Pencetakan ke-12) menyebutkan SFINAE untuk pertama kalinya.

  • Bab 8.3 - Bagian ini memperkenalkan banyak keadaan di mana substitusi argumen templat akan menyebabkan ekspansi sintaksis yang tidak masuk akal (dan dengan demikian menjadi tidak valid, yang pada gilirannya mengharuskan SFINAE). Bab ini memiliki kurva belajar yang curam bahkan untuk programmer C ++ yang berpengalaman.
  • Bab 11 - Potongan Template Argumen

    • Ch11 berisi beberapa contoh Template Argumen Pengurangan yang diperlukan untuk memahami beberapa aplikasi SFINAE yang sama-sama dibuat.
  • Bab 12.4 dan seterusnya - Spesialisasi templat kelas sebagian.

    • Ini mencakup mekanisme internal yang sering dipanggil dalam aplikasi SFINAE.

Bagian III (Ch 17 - Ch ???) Metaprogramming.

  • Ch 17 - Dimulai dengan pemrograman fungsional pengantar.

  • Aplikasi. A.3 - Aturan Satu Definisi (ODR) secara rinci.

rwong
sumber
3
Masalah dengan diskusi pra-C ++ 11 tentang TMP adalah tidak membahas constexprdan karenanya akan merekomendasikan TMP untuk semua metaprogramming, bahkan kasus-kasus di mana constexprfungsi dan tipe akan jauh lebih cocok.
Ben Voigt