Quelle est la raison de la deuxième entre crochets <> dans la suite de modèle de fonction:
template<> void doh::operator()<>(int i)
J'en DONC, la question , où il a été suggéré qu'il y a entre parenthèses manquantes après l' operator()
, cependant je ne pouvais pas trouver l'explication.
Je comprends le sens si c'était un type de spécialisation (plein de spécialisation) de la forme:
template< typename A > struct AA {};
template<> struct AA<int> {}; // hope this is correct, specialize for int
Cependant, pour les modèles de fonction:
template< 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
Où cela s'inscrit dans ce scénario?:
template<> void doh::operator()<>(bool b) {}
Exemple de code qui semble fonctionner et ne donne pas d'avertissement/d'erreur (gcc 3.3.3 utilisé):
#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);
}
Sortie:
operator()(bool b)
template <> void operator()(int i)