CRTP çok mu kullanılıyor? ve neden / değil? [kapalı]


11

Merakla yinelenen şablon desenini düşünüyorum .

Oldukça kullanışlı buluyorum ve birçok görev için oldukça iyi ayarlanabilir. Ama itiraf etmeliyim ki, doğada CRTP kodunun çoğunu görmüyorum.

Kavraması zor mu? Sanal işlevler genel olarak daha mı kolay? Sanal anahtar kelimenin göründüğü vakaların% 90'ı için kullanılmamalı mı?

Yanıtlar:


8

Basit gerçek şu ki, çoğu olmasa da, C ++ kullanıcıları vectorbundan daha iyi değildir mallocve freebu yüzden sadece takdir edip gelişmiş şablon meta programlaması uygulayan sayı çok yüksek değildir. Bu, durumların% 90'ı için iyi olsa bile, çok daha azını göreceğiniz anlamına gelir, çünkü insanlar bunu veya nasıl kullanacağını bilmiyorlar.

Ancak, sanal fonksiyonlar yok yani sanal fonksiyonlar cRTP kullanımı daha kolaydır, avantajları vardır. C ++ şablonları hemen hemen her şey ve her şey hakkında orospu olmak için kötü şöhretlidir ve dahil etme modeli topları berbat.

Ancak, [sanal işlevler] belirgin şekilde daha yavaş ve daha az güçlüdür. Örneğin, şu anda CRTP'yi kullanarak kod yazıyorum, burada ifade şablonlarıyla kullanmak için aşırı yüklenmeleri devralırsınız. Sanal işlevlerin bu işi yapmasının bir yolu yoktur.


1
CRTP'nin 'sanal' kullanımından kaçınmak için kullandığı dil özelliğinin 'sanal olarak' herhangi bir şey ve her şey hakkında iğrenç olması biraz ironik değil mi?
Kaiserludi

6

WTL , CRTP'yi kullanır. Chromium tarayıcısı, WTL kullanan iyi bilinen bir yazılım örneğidir, bu yüzden "vahşi doğada" kullanıldığını söyleyebilirim.

% 90 hakkında? Bu kesinlikle abartılı bir şey. Hiç bir polimorfik nesne kabı kullandınız mı? Bu çok yaygın bir polimorfizm kullanımıdır ve bunu CRTP ile yapamazsınız çünkü Base<DerivedA>aynı değildir Base<DerivedB>.


-5

Daha yaygın kullanılmamasının nedenleri şunlardır:

  1. Bu bir hack
  2. Bir hack olarak, kullandığınızda sorun yaşamayacağınız garanti edilmez. Normal OO işleri çok sayıda proje tarafından kullanılmış ve düzgün çalıştığı tespit edilmiştir / problemler iyi bilinmektedir, CRTP sadece az sayıda projede bulunur ve veri mevcut değildir
  3. kullanmak için iyi bir neden yoktur - oturulan nedenlerin çoğu geçerli değildir
  4. bazı şeyleri daha karmaşık hale getirebilir

11
Kesinlikle bir kesmek değil. Davranış çok iyi tanımlanmış ve çok fazla kullanımı var.
DeadMG

5
Evet, bütün STL büyük bir hack.
Abyx

Cevabınızı düzenleyebilir ve neden bir hack olduğunu açıklayabilir misiniz?
Nick
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.