SORU
7 Ocak 2010, PERŞEMBE


C 'typename' ve 'sınıf' şablonları anahtar kelimeleri fark

Şablonlar için her iki ifadeyi de gördüm:

template < typename T >

Ve:

template < class T >

Ne fark eder?

Ve tam olarak bu anahtar kelimeler aşağıdaki örnekte (şablonlar hakkında Alman Wikipedia yazısından alındı) ne demek?

template < template < typename, typename > class Container, typename Type >
class Example
{
     Container< Type, std::allocator < Type > > baz;
};

CEVAP
7 Ocak 2010, PERŞEMBE


typename class bir şablon belirten temel durumda değiştirilebilir

template<class T>
class Foo
{
};

ve

template<typename T>
class Foo
{
};

eşdeğerdir.

Bunu söyledikten sonra, typename class arasında bir fark olduğu belirli durumlar vardır.

Birincisi bağımlı türleri için böyledir. typename başka bir şablon parametresi, bu örnekte typedef gibi bağlı iç içe geçmiş bir tür başvuru ne zaman bildirmek için kullanılır:

template<typename param_t>
class Foo
{
    typedef typename param_t::baz sub_t;
};

İkincisi aslında farkında olmayabilirsin ama söz konusu Haritayı,:

template < template < typename, typename > class Container, typename Type >

Bir belirtirkenşablon şablon, class anahtar kelime üstü olarak kullanılmalıdırdeğiltypename ile değiştirilebilir bu durumda.

Ayrıca, açıkça bir şablon başlatmasını class kullanmanız gerekir:

template class Foo<int>;

Eminim orada diğer durumlarda özledim, ama asıl önemli olan: bu iki eşdeğer sözcükler değildir, ve bu, yaygın olarak kullanılan bazı durumlarda ihtiyacınız için kullanın.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Google Developers

    Google Devel

    23 AĞUSTOS 2007
  • olinerd

    olinerd

    23 AĞUSTOS 2007
  • PlayStation

    PlayStation

    16 Aralık 2005