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

  • Ben Vivona

    Ben Vivona

    24 Ocak 2010
  • Crossover

    Crossover

    18 HAZİRAN 2007
  • TomSka

    TomSka

    30 Mayıs 2006