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
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.
Statik sınıf ve singleton deseni arası...
Arayüz ve soyut sınıf arasındaki fark ...
Nereye ve neden&; şablon" quot; ve...
Bu ne anlama geliyor? &;'NSUnknow...
Sınıf ve örnek yöntemleri arasındaki f...