“C ++ Şablonları: Tam Kılavuz” (c) 2002 - C ++ 11 ile güncel mi?


10

C ++ Templates: The Complete Guide (2002) kitabı bana çok çekici geliyor, ama 12 yaşında olduğu için güncelliğini yitirmiş olabileceğinden endişe ediyorum. Bir yıl kadar önce tarihli bazı son derece olumlu Amazon incelemeleri vardır ve C ++ şablonlarında çok yeni başka başlıklar görmüyorum. 2002'de yayınlanan şablonlarla ilgili bir kitabın (özellikle STL ile ilgili bir kitabın aksine), söz konusu C ++ 11 tarafından yerine getirilmiş veya eklenmiş sözdizimi veya kavramları olup olmadığını bilen var mı?

Aşağıdaki dan Amazon Kitabın açıklamasıyla :

Şablonlar C ++ 'ın en güçlü özellikleri arasındadır, ancak çoğu zaman ihmal edilir, yanlış anlaşılır ve yanlış kullanılırlar. C ++ Şablonları: Komple Kılavuz yazılım mimarlarına ve mühendislerine daha temiz, daha hızlı ve daha akıllı yazılımları daha verimli bir şekilde oluşturmak ve sürdürmek için şablonların neden, ne zaman ve nasıl kullanılacağına dair net bir anlayış sağlar.

C ++ Şablonları temel kavramlar ve dil özellikleri hakkında kapsamlı bir öğretici ile başlar. Kitabın geri kalanı, önce dil ayrıntılarına, daha sonra çok çeşitli kodlama tekniklerine ve son olarak şablonlar için gelişmiş uygulamalara odaklanan kapsamlı bir referans olarak hizmet ediyor. Kitap boyunca kullanılan örnekler soyut kavramları ve en iyi uygulamaları göstermektedir.

Okuyucular öğrenir

  • Şablonların tam davranışları
  • Şablonlarla ilişkili tuzaklar nasıl önlenir
  • Temelden daha önce belgelenmemiş olana kadar deyimler ve teknikler
  • Performansı veya güvenliği tehdit etmeden kaynak kodunu yeniden kullanma
  • C ++ programlarının verimliliği nasıl artırılır
  • Daha esnek ve bakımı kolay yazılım nasıl üretilir

2
C ++ dilinin kendisi sadece yavaşça değiştiğinden (büyük değişiklikler sadece her 10 yılda bir yapılır) ve büyük ölçüde geriye dönük olarak uyumlu kaldığından, C ++ kitapları da bu kadar hızlı yaşlanmaz.
Bart van Ingen Schenau

Yanıtlar:


12

Güncellendi (2016/08/24)

C ++ 11 odaklı önerilen makale:

C ++ 'ın SFINAE konseptine giriş: bir sınıf üyesinin derleme zamanı içgözlemi (Jean Guegant)


Birkaç ay önce C ++ Template Metaprogramming'i öğrenen biri olarak, yine de bu kitabı okumanızı tavsiye ederim.

C ++ 11 içermez, ancak bir derleyicinin şablon kodunu nasıl işlemesi gerektiğine dair sözdizimini ve C ++ özelliklerini belirler. Kitap, C ++ şablonlarını büyük ölçüde kullanmanız gerekiyorsa, meta programlamanın dahil olup olmadığına bakılmaksızın çok daha az bilinen köşeleri kapsar.


C ++ 11'in eksik kısımları:


Stackoverflow: yapıştırılan kod çok şey göreceksiniz bir yapı var std::enable_if. Bununla birlikte, pratikte, One-Definition Rule ve SFINAE nedeniyle kullanımı oldukça zor buluyorum. Bu nedenle bu kitap önemlidir, çünkü temelleri aşmaktadır.


C ++ şablonlarını büyük ölçüde bir platformlar arası kitaplıkta kullanıyorsanız, kodunuzu farklı derleyicilerde sınamanız gerekir. Bunun nedeni, her derleyicinin C ++ belirtimine farklı uyum düzeyine sahip olmasıdır. Birinde iyi derlenen kod diğeri tarafından reddedilebilir ve bazen kabul eden derleyici belirtimi ihlal eden koddur.


İşte bu kitaptan geçerken okuma notlarım. Umarım yardımcı olacaktır.

Kitap okuma notları - C ++ Şablonları - Komple Kılavuz (2003)

  • Bölüm 2.5 - İşlev Şablonları - Özet
    • Aşırı yük çözünürlüğü ve en iyi uygulamalar
  • Bölüm 3.3 - Sınıf Şablonlarının Uzmanlaşması
  • Bölüm 3.4 - Kısmi Uzmanlık
    • Belirsizlik (ODR hatası) ve nasıl çözüleceği. ODR = Tek Tanımlı Kural
  • Bölüm 4.3 - Tür Dışı Şablon Parametreleri için Kısıtlamalar
    • Örnek: harici bağlantılı dize değişmez değerleri
  • Bölüm 5 ve Bölüm 6 - Bu iki bölüm çok iç karartıcı. Şablonları kullanmaya duygusal olarak hazır olduğunuzda atlayıp ardından geri dönmek isteyebilirsiniz.

  • Bölüm II (Bölüm 8 - Bölüm ???) İleri düzeydeki bölüm.

  • Bölüm 8 - Diğer kurallar

    • Tüm Ch 3'e (sınıf şablonları - temel bilgiler) zaten aşina olan bir programcı için Ch 8.1 ve 8.2 Ch 3'ün hemen ardından okunmalıdır, çünkü ek kurallar temel kurallar kadar önemlidir ve önemlidir. Bu biraz acı kazandıracak.
  • Bölüm 8.3.1 (12. Baskıda Sayfa 106) SFINAE'den ilk kez bahseder.

  • Bölüm 8.3 - Bu bölüm şablon argümanı değiştirmenin saçma sapan sözdizimsel genişlemelere yol açtığı (ve dolayısıyla SFINAE gerektiren geçersiz hale gelen) birçok durumu açıklamaktadır. Bu bölüm deneyimli C ++ programcıları için bile dik bir öğrenme eğrisine sahiptir.
  • Bölüm 11 - Şablon Bağımsız Değişken Kesintisi

    • Ch11, eşit derecede tutarlı SFINAE uygulamalarının bazılarını anlamak için gerekli olan bazı onaylanmış Şablon Argüman Kesintisi örnekleri içerir.
  • Bölüm 12.4 - Kısmi sınıf şablonu uzmanlığı.

    • Bu, bir SFINAE uygulamasında sıklıkla çağrılan iç mekaniği kapsar.

Bölüm III (Bölüm 17 - Bölüm ??) Metaprogramlama.

  • Bölüm 17 - Girişsel fonksiyonel programlama ile başlar.

  • Uygulama. A.3 - Tek Tanımlı Kural (ODR) ayrıntılı olarak.


3
TMP'nin C ++ 11 öncesi tartışmasıyla ilgili sorun, kapsamın kapsamamasıdır constexprve bu nedenle, constexprişlevlerin ve türlerin çok daha uygun olacağı durumlarda bile tüm metaprogramlama için TMP'yi önerecektir .
Ben Voigt
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.