2016-04-05 19 views
0

C++ 'da şablon kullanmadan genel programlamanın yapılıp yapılamayacağını bilmek istiyorum. Şablon kullanmadan şablonlar kullanılarak yazılan C++ 'daki tüm kütüphaneleri yazmak mümkün mü? Şablonlar için C++'da herhangi bir alternatif var mı? şablonları - Bilmek istiyorumgüç (C++ - {templates}) = güç (C++)?

mümkün aynı işlevsellikle

+2

Yumurta olmadan çırpılmış yumurta yapıp yapamayacağınızı sormak gibidir. – juanchopanza

+0

Varsayımsal olarak, Java yaklaşımını takip edebilir ve her şeyi genel bir "Object" sınıfı veya "CObject" sınıfının bir alt sınıfını/torununu yapabilirsiniz. Pratik olarak, bu farklı bir hikaye. – tinlyx

+0

@tinlyx Ama bu size aynı işlevi vermez. – juanchopanza

cevap

2

Teorik olarak, C++ şablonları olmadan hala Turing-complete, böylece bu dilde her işlev için C++ ile şablonlar da yazılabilen bir program yazabilirsiniz. Bilgime göre, C++'daki makro önişlemci Turing-complete değil, şablonlar. Yani sadece şablon olarak uygulanabilen, ancak makrolarla birlikte olmayan fonksiyonlar olmalıdır.

Pratik olarak, her şeyi aynı semantiklerle yeniden uygulamak mümkün olduğunu düşünmüyorum. Şablonlar olmadan, muhtemelen tip güvenliklerini feda etmeniz ve makroları, void* veya basit Java kütüphaneleri için bile erken Java sınıfları gibi miras temelli yaklaşımları kullanmanız gerekir.

Daha gelişmiş meta programlama kitaplıkları için, örn. İfade şablonları, boyutlu analiz çerçeveleri, Boost.Spirit Boost.Proto, onlar başka bir meta-programlama biçimi olmadan uygulanabileceğinden şüpheliyim.Makrolar işe yarayabilir, ancak bu daha çok bir kod üreteci gibi olacak ve derleyiciye tip kontrolünü erteleyecek ve hata mesajları şu anda şablonlarımızla olandan daha da kötü olacak. Ek olarak, semantikler, w.r.t parametresinin geçmesinden farklıdır. Standart kitaplığın çoğunun şablonlardan oluştuğu göz önünde bulundurulduğunda, no.

+0

İlk cümlenin neden "Teorik olarak" dediği gibi, şablonlar olmadan karmaşık C++ programları yazmak, pek çok kez kapsamlı bir şekilde test edilmeyen zor bir şey midir? Demek istediğim, C var. –

+0

Makrolar gibi şablonların bir çeşit kod üreteci olduğunu eklemek istiyorum. Jens'in belirttiği gibi, fark * kod oluşturulduğunda *. Ön işleme vs derleme, metin manipülasyonu vs tip kontrol. Bu yüzden şablonlar üstün kod üreteçleridir. – TobiMcNamobi

+1

@BenjaminLindley Teorik olarak söyledim çünkü hesaplama teorisine dayanan bir argüman. Sayısal veri türlerinin çok büyük bir gelişme olduğunu düşünmeme rağmen, hesaplamasal ifadeye atıfta bulunmamıştım ya da bu yararlı ya da değil. – Jens

1

Eh bana sağlamak şablonları kullanarak C++ ile yazılmış kütüphaneler üzerinde bir soyutlama yazmak için mi, şablonlar vardır sadece. Onlar gerçek tipler ve fonksiyonlar için planlar. Yani teorik olarak, tüm bu şablon örneklemelerini elle yapabilirsiniz. Ama bu artık jenerik programlama olmaz. soru için

+1

Şablonlar bundan biraz daha fazlası, en azından C++ 'da. Onlar Turing-tam bir dildir. – Jens

1

Cevap:

herhangi bir alternatif şablonları için C++ mevcut mudur?

Makrolar şablonlara alternatiftir. (Değil iyi bir alternatif, ancak alternatif) İlgili linkler [1], [2]

karşılaştırın: macroses ait

#define min(i, j) (((i) < (j)) ? (i) : (j)) 

template<class T> T min (T i, T j) { return ((i < j) ? i : j) } 

Sorunlar:

  • hiçbir tip kontrolü,
  • o kadar anlaşılabilir derleyici hataları, çoklu hesaplama ifadelerinin yan etkileri olan
  • genişleyen makrolar Söz Hakkında

:

mümkün şablon kullanmadan şablonlar kullanılarak yazılmış olan C++ bulunan tüm kütüphaneler yazmak doğru değil.

Bazı durumlarda makroları kullanmak mümkündür. Her kütüphane türü için uygulama yazmak veya oluşturmak mümkündür. Ancak, kullanıcı tanımlı tür kitaplığı için, makroların yararlı olabileceği basit durumlar dışında, uygulama yapılamaz. Daha önceki saf C (C++) olmayan programlar, bazı "kaynak" şablonlarından bazı kaynaklar oluşturmak için yapım aşamasında kullanılan kaynaklarda özel araçlar içerir.

İlgili konular