C ++ standardı neden şablonlar için iki aşamalı arama tanımlar? Bağımlı olmayan beyanlar ve tanımların aramaları da örnekleme aşamasına ertelenemez mi?
C ++ standardı neden şablonlar için iki aşamalı arama tanımlar? Bağımlı olmayan beyanlar ve tanımların aramaları da örnekleme aşamasına ertelenemez mi?
Yapabilirlerdi. Şablonların en erken uygulama şekli budur
çalıştı ve hala Microsoft derleyicisinin çalıştığı yoldur. Hissedildi
(komitede) bunun çok hataya eğilimli olduğunu; çok kolay oldu
yanlışlıkla tek bir çeviri ile bir isim, bir isim kaçırmak
istenen global sembol yerine yerel bir adın toplanması. (A
tipik çeviri birimi bir dizi #include
s,
Herkesin görmesi gereken isimleri ilan etmek, ardından uygulamayı yapmak
kodu. Anlatım noktasında, her şeyden önce
Uygulama kodu da dahil olmak üzere, görünür.
Son karar, bir şablondaki sembolleri ikiye ayırmaktı.
kategoriler: bağımlı ve bağımlı olmayan ve
bağımlı olmayan semboller tanım noktasında çözülebilir
Şablon, yanlışlıkla bir şekilde bağlı olmak riskini azaltmak için
yerel uygulama sembolleri. Belirtme şartı ile birleştiğinde
typename
ve template
bağımlı semboller için uygun olduğunda, bu
ayrıca ayrıştırma ve tanım noktasında bazı hata kontrolüne izin verir
Şablonun, yalnızca şablon örneği oluşturulduğunda değil.
Bu bir uygulama olarak görülebilir endişelerin ayrılığı.
İlk aşamada doğru sözdizimini kontrol eder ve açıklanmadığı gibi bağımlı olmayan isimleri çözer. İşte. İkinci aşamada, aramaların belirli tiplerle geçerli olup olmadığını doğrulayan, daha şablona özgü bir şey yapar. Bu [cevap] 'a bakın İki fazlı arama - açıklama gerekli)
Dahası, eğer sadece bir aşamada yapılacaksa, o zaman her bir örnekleme yapılmalıdır. Bu yol sadece bir kez yapılır.
Sadece ilk örneklemede yapılacaksa, o zaman aynı şey olurdu, sadece daha az yapılandırılmış olurdu.