Metaprogramming statis (alias "template metaprogramming") adalah teknik C ++ hebat yang memungkinkan eksekusi program pada waktu kompilasi. Sebuah bola lampu padam di kepala saya segera setelah saya membaca contoh pemrograman metaprogram kanonik ini:
#include <iostream>
using namespace std;
template< int n >
struct factorial { enum { ret = factorial< n - 1 >::ret * n }; };
template<>
struct factorial< 0 > { enum { ret = 1 }; };
int main() {
cout << "7! = " << factorial< 7 >::ret << endl; // 5040
return 0;
}
Jika seseorang ingin mempelajari lebih lanjut tentang pemrograman metaprogram statis C ++, apa sumber terbaiknya (buku, situs web, perangkat kursus online, apa pun)?
c++
templates
metaprogramming
jwfearn
sumber
sumber
Jawaban:
[Menjawab pertanyaan saya sendiri]
Perkenalan terbaik yang pernah saya temukan sejauh ini adalah bab 10, " Pemrograman Metapetik Statis dalam C ++" dari Pemrograman Generatif, Metode, Alat, dan Aplikasi oleh Krzysztof Czarnecki dan Ulrich W. Eisenecker, ISBN-13: 9780201309775; dan bab 17, "Metaprogram" dari Template C ++: Panduan Lengkap oleh David Vandevoorder dan Nicolai M. Josuttis, ISBN-13: 9780201734843.
Todd Veldhuizen memiliki tutorial yang sangat bagus di sini .
Sumber yang bagus untuk pemrograman C ++ secara umum adalah Modern C ++ Design oleh Andrei Alexandrescu, ISBN-13: 9780201704310. Buku ini menggabungkan sedikit metaprogramming dengan teknik template lainnya. Khususnya untuk metaprogram, lihat bagian 2.1 "Pernyataan Waktu Kompilasi", 2.4 "Memetakan Konstanta Integral ke Jenis", 2.6 "Pemilihan Jenis", 2.7 "Mendeteksi Konvertibilitas dan Warisan pada Waktu Kompilasi", 2.9 "
NullType
danEmptyType
" dan 2.10 "Sifat Jenis ".Sumber daya menengah / lanjutan terbaik yang pernah saya temukan adalah C ++ Template Metaprogramming oleh David Abrahams dan Aleksey Gurtovoy, ISBN-13: 9780321227256
Jika Anda lebih suka hanya satu buku, dapatkan C ++ Templates: The Complete Guide karena ini juga merupakan referensi definitif untuk template secara umum.
sumber
Buku Desain C ++ Modern Andrei Alexandrescu mencakup banyak hal ini dan trik lainnya untuk kode C ++ modern yang cepat dan efisien dan merupakan dasar dari perpustakaan Loki .
Yang juga perlu disebutkan adalah perpustakaan Boost , yang banyak menggunakan teknik ini dan biasanya berkualitas sangat tinggi untuk dipelajari (meskipun beberapa di antaranya cukup padat).
sumber
Modern C ++ Design , buku brilian dan kerangka pola desain oleh Alexandrescu. Peringatan, setelah membaca buku ini saya berhenti menggunakan C ++ dan berpikir "Apa-apaan ini, saya bisa memilih bahasa yang lebih baik dan mendapatkannya secara gratis".
sumber
Dua buku bagus yang muncul di benak adalah:
Ini merupakan bidang yang cukup mendalam, jadi buku yang bagus seperti salah satunya pasti direkomendasikan melalui situs web. Beberapa dari teknik yang lebih maju akan membuat Anda mempelajari kode selama beberapa waktu untuk mengetahui cara kerjanya!
sumber
Modern C ++ adalah salah satu pengantar terbaik yang pernah saya baca. Ini mencakup contoh yang benar-benar berguna dari metaprogramming template. Lihat juga perpustakaan pendamping Loki .
sumber
Tidak akan ada banyak daftar buku, karena daftar orang dengan banyak pengalaman terbatas. Pemrograman template dimulai secara nyata sekitar Lokakarya Pemrograman Template C ++ pertama pada tahun 2000, dan banyak penulis yang disebutkan sampai saat ini hadir. (IIRC, Andrei tidak.) Para pionir ini sangat mempengaruhi lapangan, dan pada dasarnya apa yang harus ditulis sekarang ditulis. Secara pribadi, saya akan menasihati Vandevoorde & Josuttis. Buku Alexandrescu adalah buku yang sulit jika Anda baru di bidang ini.
sumber
Makalah asli Veldhuizen bagus. Jika Anda ingin mendapatkan satu buku utuh, maka ada buku Vandevoorde "C ++ Templates Complete Guide". Dan ketika Anda siap untuk kursus master, cobalah Desain C ++ Modern Alexandrescu.
sumber
google Alexandrescu, C ++ Desain Modern: Pemrograman Generik dan Pola Desain Diterapkan
sumber