SORU
17 Mayıs 2009, Pazar


C sadece belirli türde kabul şablonları

Java seçim sizin, örneğin sınıf aşan tek tip kabul eden genel sınıf tanımlayabilirsiniz:

public class ObservableList<T extends List> {
  ...
}

Bu yapılır kullanarak "" anahtar kelime.

C bu anahtar kelime için bazı basit eşdeğer var mı ?

CEVAP
17 Mayıs 2009, Pazar


Kullanarak Artırmak static assert Destek Türü Özellikleri kütüphaneden is_base_of konser özellik öneriyorum

template<typename T>
class ObservableList {
    BOOST_STATIC_ASSERT((is_base_of<List, T>::value)); //Yes, the double parentheses are needed, otherwise the comma will be seen as macro argument separator
    ...
};

Başka, daha basit durumda, sadece ileriye dönük beyan küresel bir şablon, ama sadece (açıkça veya kısmen uzmanım) geçerli türlerini tanımlayabilirsiniz:

template<typename T> my_template;     // Declare, but don't define

// int is a valid type
template<> my_template<int> {
    ...
};

// All pointer types are valid
template<typename T> my_template<T*> {
    ...
};

// All other types are invalid, and will cause linker error messages.

[Küçük değişiklik 6/12/2013: ilan etti-ama-değil-tanımlanmış bir şablonu Kullanarak neden olurlinkerderleyici , hata mesajları.]

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ash100HD

    Ash100HD

    29 EKİM 2011
  • curioustravelers

    curioustrave

    12 AĞUSTOS 2006
  • Damien Hayes

    Damien Hayes

    11 Mart 2008