C ++ şablon meta programlamasına en iyi giriş? [kapalı]


112

Statik meta programlama ("şablon meta programlama" olarak da bilinir), programların derleme zamanında yürütülmesine izin veren harika bir C ++ tekniğidir. Bu kanonik metaprogramlama örneğini okur okumaz kafamda bir ampul patladı:

#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;
}

C ++ statik meta programlama hakkında daha fazla bilgi edinmek istiyorsanız, en iyi kaynaklar hangileridir (kitaplar, web siteleri, çevrimiçi eğitim yazılımı, her neyse)?


43
ampul "söndü" mü yoksa "açık" mı?
horseyguy

36
Kapalı. Kesinlikle kapalı.
Thomas Eding

Yanıtlar:


108

[Kendi sorumu cevaplıyorum]

Şimdiye kadar bulduğum en iyi tanıtımlar , Krzysztof Czarnecki ve Ulrich W. Eisenecker, ISBN-13: 9780201309775 tarafından Üretken Programlama, Yöntemler, Araçlar ve Uygulamalar'dan "C ++ 'da Statik Metaprogramlama" adlı bölüm 10 ; ve bölüm 17, "Metaprograms" C ++ Şablonları: Tam Kılavuz , David Vandevoorder ve Nicolai M. Josuttis, ISBN-13: 9780201734843.

alternatif metin alternatif metin alternatif metin alternatif metin

Todd Veldhuizen'in burada mükemmel bir öğreticisi var .

Genel olarak C ++ programlama için iyi bir kaynak, Andrei Alexandrescu'nun hazırladığı Modern C ++ Tasarımı , ISBN-13: 9780201704310'dur. Bu kitap, diğer şablon teknikleriyle biraz meta programlamayı harmanlamaktadır. Özellikle metaprogramlama için, 2.1 "Derleme Zamanı İddiaları", 2.4 "İntegral Sabitleri Türlerle Eşleştirme", 2.6 "Tür Seçimi", 2.7 "Derleme Zamanında Dönüştürülebilirliği ve Kalıtımı Algılama", 2.9 " NullTypeve EmptyType" ve 2.10 "Tür Özellikleri'ne bakın. ".

Bulduğum en iyi orta / ileri düzey kaynak , David Abrahams ve Aleksey Gurtovoy tarafından yazılan C ++ Şablon Metaprogramlama, ISBN-13: 9780321227256

Yalnızca bir kitabı tercih ediyorsanız, C ++ Şablonları: Tam Kılavuz'u edinin, çünkü bu aynı zamanda genel olarak şablonlar için kesin başvuru kaynağıdır.


2
Todd Veldhuizen'in eserinin bağlantısı eskimiş.
John R. Strohm


1
bağlantı şimdi düzeltildi, teşekkürler!
jwfearn

Bağlantı tekrar koptu!
Paul

1
Teşekkür ederim @jwfearn, makaleyi okudum, ancak bunu daha ilginç bulsam da: youtube.com/watch?v=Am2is2QCvxY (iki bölümü var). Walter E. Brown tarafından yapılan bir konuşma: Modern Şablon Metaprogramlama: Bir Özet
Paul

24

Andrei Alexandrescu'nun Modern C ++ Tasarım kitabı, hızlı ve verimli modern C ++ kodu için bu ve diğer püf noktalarının çoğunu kapsar ve Loki kütüphanesinin temelini oluşturur .

Ayrıca , bu teknikleri yoğun bir şekilde kullanan ve genellikle öğrenmesi çok yüksek kalitede olan (bazıları oldukça yoğun olmasına rağmen) Boost kitaplıklarından bahsetmeye değer .


12

Modern C ++ Design , Alexandrescu tarafından hazırlanmış harika bir kitap ve tasarım deseni çerçevesi. Uyarı kelimesi, bu kitabı okuduktan sonra C ++ yapmayı bıraktım ve "Ne oluyor, daha iyi bir dil seçip ücretsiz olarak edinebilirim" diye düşündüm.


5
"Lanet olsun, daha iyi bir dil seçip bedavaya edinebilirim" Ummm, ne demek istiyorsun? Özellikle "bedava" ile kafam karıştı. Aklınızda başka hangi dil vardı?
Pop Catalin

12
C ++ şablon metaprogramlama, türleri veya türlerin listesini bağımsız değişken olarak geçirme gibi her türlü yeni yeteneği sağlar. Bu yeteneklerin çoğu python gibi dinamik olarak yazılmış dillerde, daha güzel sözdizimiyle mevcuttur.
Florian Bösch

1
Doğru programları hızlı bir şekilde yazabileceğiniz bir dil arıyorsanız, Python C ++ 'dan daha iyidir. C ++ 'nın sağladığı diğer şeylerden bazılarına ihtiyacınız varsa, Lisp benzeri özelliği C ++' ya eklemek, C ++ 'ı denemekten daha iyi olabilir - başka bir dilde.
David Thornley

6

Akla gelen iki güzel kitap:

  • Modern C ++ Design / Andrei Alexandrescu (İsme rağmen aslında 7 yaşında!)
  • C ++ Şablonları: Tam Kılavuz / Vandevoorde ve Josuttis

Oldukça derinlemesine bir alandır, bu nedenle web sitelerinde kesinlikle bunlardan biri gibi iyi bir kitap tavsiye edilir. Daha gelişmiş tekniklerden bazıları, nasıl çalıştıklarını anlamak için bir süre kodu incelemenizi sağlayacaktır!


5

Modern C ++ , okuduğum en iyi tanıtımlardan biridir. Şablon meta programlamanın gerçek yararlı örneklerini kapsar. Ayrıca, yardımcı kütüphane Loki'ye bir göz atın .


5

Çok fazla deneyime sahip kişilerin listesi sınırlı olduğundan, çok sayıda kitap listesi olmayacak. Şablon metaprogramlama, 2000 yılında ilk C ++ Şablon Programlama Çalıştayı sırasında başladı ve şimdiye kadar adı geçen yazarların çoğu katıldı. (IIRC, Andrei etmedi.) Bu öncüler alanı büyük ölçüde etkiledi ve temelde yazılması gerekenler şimdi yazılıyor. Şahsen, Vandevoorde & Josuttis'i tavsiye ederim. Alexandrescu'nun kitabı, eğer sahada yeniyseniz zor bir kitaptır.


4

Veldhuizen'in orijinal belgeleri iyiydi. Bütün bir kitaba hazırsanız, Vandevoorde'un "C ++ Şablonları Tam Kılavuzu" adlı kitabı var. Ve yüksek lisans kursuna hazır olduğunuzda, Alexandrescu'nun Modern C ++ Tasarımını deneyin.


4

google Alexandrescu, Modern C ++ Tasarım: Uygulanan Genel Programlama ve Tasarım Modelleri

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.