Saya baru saja memulai perjalanan saya sebagai pengembang C ++, dan baru-baru ini saya meneliti topik yang disebut pemrograman-meta. Sejauh ini, saya telah melalui banyak informasi mengenai topik ini, dan memiliki beberapa pertanyaan.
Penggunaan Refleksi dalam c ++: Apakah mungkin? Sesuai pemahaman saya, refleksi adalah teknik meta-pemrograman yang memiliki kemampuan untuk memanipulasi keadaan suatu program, dan manipulasinya dapat berupa introspeksi atau introcession.
Apa perbedaan antara arsitektur reflektif dan arsitektur meta-level? Dalam kategori apa arsitektur meta-pemrograman termasuk dalam kategori ini?
Meta-programming terdiri dari dua level: level meta dan level dasar. Dalam pemahaman saya, program objek atau sistem yang sedang diselidiki adalah tingkat dasar, dan program meta yang akan beroperasi di atas sistem yang diselidiki adalah tingkat meta. Apakah saya benar?
Juga bantu saya dengan memberikan beberapa panduan tentang bekerja pada pemrograman metap di C ++.
Bolehkah Anda menyarankan saya beberapa contoh yang bisa diterapkan yang bisa saya cari untuk mendapatkan pengalaman dalam teknik pemrograman ini?
Jawaban:
Metaprogramming berarti Anda memiliki sarana untuk menulis kode yang menulis kode lain (dalam arti luas). C ++ melakukan ini melalui mekanisme templat, yang pada dasarnya adalah bahasa makro tipe-aman. Sangat mungkin untuk hanya menerapkan langkah perluasan templat, dan hasilnya akan menjadi kode C ++ bebas templat yang valid.
Refleksi adalah kemampuan bahasa pemrograman dan / atau lingkungan runtime untuk memeriksa (dan sering memodifikasi) elemen bahasanya sendiri pada saat run-time. Biasanya, bahasa reflektif menawarkan struktur data yang mewakili elemen bahasa seperti kelas, metode, variabel, parameter, dll., Serta rutinitas atau kelas untuk memeriksa, memodifikasi, dan membuatnya. Kemampuan modifikasi menjadikan refleksi jenis meta-pemrograman, karena memungkinkan Anda untuk menulis kode yang menghasilkan kode lain.
Contoh lain dari metaprogramming termasuk generator kode, biner yang memodifikasi sendiri (meskipun ini tidak sepopuler hari ini karena mereka dua dekade lalu), makro C; orang bisa berpendapat bahwa kari dan teknik pemrograman fungsional serupa juga semacam metaprogramming.
sumber
2-3. Saya tidak tahu - tunggu jawaban lain yang membantu :-)
Pemrograman meta menggunakan templat C ++ sangat kuat, tetapi juga rumit. Perluasan templat membutuhkan gaya fungsional pemrograman daripada pemrograman imperatif yang digunakan C ++. Jika Anda tidak memiliki pengalaman sebelumnya dengan pemrograman fungsional, saya akan merekomendasikan Anda untuk mengambil jalan memutar dan mempelajari beberapa dasar lump, haskell atau skema.
sumber