:İşlev şablonu uzmanlık biçimi aşağıdaki fonksiyon şablonunda ikinci parantez <> sebebi nedir
template<> void doh::operator()<>(int i)
Bu SO question gündeme geldiği bu operator()
sonra, ancak elimden kayıp parantez olduğu öne sürüldü açıklama bulamıyor. fonksiyon şablonları Ancak
template< typename A > struct AA {};
template<> struct AA<int> {}; // hope this is correct, specialize for int
:
Ben formun bir tür uzmanlık (tam uzmanlık) ise anlamını anlamak
bu scenarion içine bu uyum yapartemplate< typename A > void f(A);
template< typename A > void f(A*); // overload of the above for pointers
template<> void f<int>(int); // full specialization for int
?:
template<> void doh::operator()<>(bool b) {}
Çalıştığınız gibi görünen ve herhangi bir wa vermeyen örnek kod rnings/hatası (kullanılan gcc 3.3.3):
#include <iostream>
using namespace std;
struct doh
{
void operator()(bool b)
{
cout << "operator()(bool b)" << endl;
}
template< typename T > void operator()(T t)
{
cout << "template <typename T> void operator()(T t)" << endl;
}
};
// note can't specialize inline, have to declare outside of the class body
template<> void doh::operator()(int i)
{
cout << "template <> void operator()(int i)" << endl;
}
template<> void doh::operator()(bool b)
{
cout << "template <> void operator()(bool b)" << endl;
}
int main()
{
doh d;
int i;
bool b;
d(b);
d(i);
}
Çıktı:
operator()(bool b)
template <> void operator()(int i)
çok gariptir. Normalde operatörü gördüm (bool b), fakat operatör() (bool b) nasıl çalışır? İlk boş() kullanımı nedir? – Jimm
@Jimm yöntem adı 'operator()' dır ve bir parametre 'bool b' alır ... işlev çağrısı operatörüdür. Kod örneğimde 'ana ',' d (b) ' – stefanB