Ben aşina olduğum bir söz dizimi değil, ama ben bir örnek olmak another question gördüm:C++ 'da şablon ne anlama geliyor?
template<>
aslında ne anlama gelir, hiçbir şablon türü/parametresi?
Ben aşina olduğum bir söz dizimi değil, ama ben bir örnek olmak another question gördüm:C++ 'da şablon ne anlama geliyor?
template<>
aslında ne anlama gelir, hiçbir şablon türü/parametresi?
Bu bir uzmanlık alanıdır. template<>
, uzmanlaşmanın kendisinin templasyonda olmadığı anlamına gelir, yani kısmi bir uzmanlık değil, açık bir uzmanlıktır.
Sadece gerekli sözdizimi olduğunu söyleyebilirsiniz.
Normal sözdizimi template< typename T > struct Allowed
;
biz bu durumda T std :: string kendi başına struct Allowed<std::string>
yazma sen ima olmaz çünkü hala gerekli olduğuna açılı parantez ancak kelime şablonu ve açılı parantez içine koymak için hiçbir şey olduğunu biliyoruz Çünkü şablonu özelleştirme, ancak yalnızca std :: string ile birini örnek olarak oluşturuyorsunuz. ("Struct" kelimesinin bunu yapmak gerekli değildir, ancak yine de izin verilir).
Bu bir şablon uzmanlığıdır. Tipik durum kısmi uzmanlaşma olacaktır: Gördüğünüz gibi, uzmanlık şablon parametrelerinden bir elementi kaldırır ve açıkça yerine kaldırılan birinin bir tür devletler
#include <iostream>
template<class T1, class T2> struct foo
{
void doStuff() { std::cout << "generic foo "; }
};
template<class T1>
struct foo<T1, int>
{
void doStuff() { std::cout << "specific foo with T2=int"; }
};
. Sadece bir şablon türü varsa Yani, <>
sadece boş hale gelir:
template<class T1> struct bar
{
void doStuff() { std::cout << "generic bar"; }
};
template<>
struct bar<int>
{
void doStuff() { std::cout << "specific bar with T1=int"; }
};
"şablon <> uzmanlaşma kendisi şablonlu olmadığı anlamına gelir". Bu, yalnızca söz konusu örnek için geçerli olduğu için tamamen doğru değildir. Örneğin: Şablon struct A {template void f(); }; <> template void A :: f() {} '. Bu diğer örnekte, üyenin açık uzmanlığı hala bir şablon. (Bu biraz nitpicking, ama bilmek önemlidir). –
Cevabı anlamıyorum. Kısmi ve özel arasında nasıl farklılaştığını göstermek için değişiklik yapabilir misiniz? – wallyk