? Başka bir deyişle: C++, bir şablon içindeki sınıfın başka bir şeyin alt sınıfı olduğunu söylememe izin veriyor mu?C++ Sınıf mirası ve şablonlar
cevap
Gerçekten direkt olarak değil. Ama bu gibi type_traits ile static_assert kullanabilirsiniz:
static_assert(is_base_of<A,B>::value, "C<B> requires B:A");
Örneğin Yapıcınızda o koyabilirsiniz, o zaman gereksinimi memnun değilse derlemek başarısız olur. Bunun tüm C++ 11 şeyler olduğuna dikkat edin, ancak bundan önce Boost'ta var ya da gerçekten takılırsanız kendinizi kodlayabilirsiniz (dil desteği gerektirmez). Bunun yerine bu yazabilir
template <class B>
class C
{
//here you can check it, and generate your own error message!
static_assert(extends<B,A>(),
"Constraint Violation: B doesn't derive from A.");
B instance;
};
Veya: Sonra olarak sınıfını tanımlamak
template<typename D, typename B>
using extends = std::is_base_of<B,D>;
:
olarak (sadece bir şeker kaplı adı olan) extends
adında bir meta işlevi tanımlayın :
//define it a bit differently now!
template<typename D, typename B>
using extends = typename std::enable_if<std::is_base_of<B,D>::value>::type;
template <class B, class Unused=extends<B,A>>
class C
{
B instance;
};
Ancak bu durumda, kendi erro'nuzu oluşturma fırsatınız yok. mesaj. Derleyici, no'lu no'lu hata mesajını atmakta zorluk çekiyor.
Her halükarda, muhtemelen std::is_base_of<>
'u doğrudan kullanabileceğinizi biliyorsunuzdur. Ancak ismine şeker kaplı olarak bakıyorsanız, extends
iyi geliyor!
ikinci örnekte 'Unused' kaldırabilirsiniz –
- 1. Şablonlar, İşlev İşaretçiler ve C++ 0x
- 2. Garip bildirim (şablonlar). C++
- 3. Sugar ORM sınıfının mirası ve elementleri kaydet
- 4. Değişken Şablonlar ve Türleri
- 5. Şablonlar için AS3 (like C++)
- 6. Şablonlar ve sabit dizeler
- 7. Jenkins işlerinde iş mirası
- 8. IDisposable ile arabirim mirası?
- 9. Sınıf ve std :: C++ sınıf üyesindeki async
- 10. Değişkin Şablonlar ve Tip Özellikleri
- 11. "Şablonlar dizini değiştirilemedi() ..." Dev C++ 'da Hata
- 12. Rails göç dönüşüm MySQL mirası
- 13. html.haml vs Rails'de ralli şablonlar görünüm şablonlar
- 14. MVC + Şablonlar
- 15. Şablonlar uzmanlık
- 16. Django, şablonlar, döngüler için, ve döngüleri
- 17. Cython: python sınıfındaki sarmalayıcılarda şablonlar
- 18. getter ve c sınıfı sınıf için setter #
- 19. Cython Sınıf Kalıtım ve gömülme C++
- 20. C# ve Moq, soyut sınıf mock
- 21. Tanrısal nesnelerin parçalanması için arabirim mirası?
- 22. Microsoft Azure MVC 3 Web rolü alışkanlık' Twilio denetleyici sınıfı ile başlamak TwilioController temel sınıf mirası
- 23. Spefic one hariç tüm şablonlar için şablonlar nasıl uygulanır?
- 24. flatiron.js/plakaları kısmi şablonlar?
- 25. Özel şablonlar kullanarak rails3
- 26. Angular2 Farklı şablonlar
- 27. Köşeli Raylar Şablonlar çalışmıyor
- 28. C# kod sınıf diyagramı
- 29. C++ sınıf Sınıfının kullanımı;
- 30. Modül yükleyicisi olmayan şablonlar?
@LuchianGrigore: benzer, ancak bu işlevler hakkındadır ve bu derslerle ilgilidir. Çözümler biraz farklı olabilir (ör. Enable_if buradaki en yüksek cevaptır, ancak burada çok anlamlı değildir). –