SORU
17 EKİM 2008, Cuma


C şablon şablon parametreleri bazı kullanım alanları nelerdir ?

C şablon şablon parametreleri (parametre olarak kabul şablonlar şablonlar) Politika tabanlı kullanarak bazı örnekler sınıf tasarım gördüm. Diğer kullanır bu tekniği nedir?

CEVAP
17 EKİM 2008, Cuma


Şablon şablon sözdizimini şablonu bu gibi başka bir şablon üzerinde bağımlı olan bir parametre geçmek için kullanmanız gerekir bence

template <template<class> class H, class S>
void f(const H<S> &value) {
}

Burada, H şablonu esas alan bir tip, ama bu işlevi H tüm uzmanlık halletmek istedim.

NOTDaha önce c programlama yaptım ve sadece bir kere ihtiyaç var. Nadiren gerekli bir özellik (bu gerekiyor! tabii ki) çok kullanışlı buluyorum.

İyi örnekleri düşünmeye çalışıyorum, ve bu gerekli değil, ama en dürüst olmak gerekirse, böyle bir tedbir bir örnek. Hadi std::vector gibiyoktypedef value_type var.

Nasıl vektör öğeleri için doğru türde değişkenleri oluşturmak için bir işlevi yazmak ister misin? Bu işe yarar.

template <template<class, class> class V, class T, class A>
void f(V<T, A> &v) {
    // This can be "typename V<T, A>::value_type",
    // but we are pretending we don't have it

    T temp = v.back();
    v.pop_back();
    // Do some work on temp

    std::cout << temp << std::endl;
}

NOT: std::vector iki şablon parametreleri, türü ve ayırıcı vardır, ikisini de kabul etmek zorunda kaldık. Neyse ki, tip kesintisi nedeniyle, tam türünü açıkça yazmak gerek kalmayacak.

bu gibi kullanabilirsiniz:

f<std::vector, int>(v); // v is of type std::vector<int> using any allocator

ya da daha iyisi, sadece kullanabilirsiniz:

f(v); // everything is deduced, f can deal with a vector of any type!

GÜNCELLEMEHatta bu yapmacık örnek, açıklayıcı olsa da, artık şaşırtıcı bir örnek c 11 auto tanıtımı nedeniyle. Şimdi aynı fonksiyonu olarak yazılabilir:

template <class Cont>
void f(Cont &v) {

    auto temp = v.back();
    v.pop_back();
    // Do some work on temp

    std::cout << temp << std::endl;
}

bu tür bir kod yazmayı tercih ederim.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Metheud

    Metheud

    9 EYLÜL 2006
  • Sorikan

    Sorikan

    3 ŞUBAT 2008
  • Tahir Jahi

    Tahir Jahi

    6 Mart 2006