Sto cercando di essere in grado di scrivere una grammatica estensibile usando le funzioni, ma non riesco a trovare la sintassi corretta per accettare una funzione template. Sto usando Visual C++ 2008. Accetterà una variabile dello stesso tipo della funzione template, o una funzione non-template simile, ma non la funzione template stessa.Operatore di overloading << per accettare una funzione template
errore 1 Errore C2679: binario '< <': nessun operatore trovato che prende un operando a destra di tipo 'sovraccarico-funzione' (o non v'è alcuna conversione accettabile) (line
***
)
class Grammar {
friend Grammar operator << (const Grammar& lhs, const char* rhs) {
return lhs; // append rhs to grammar
}
template<typename T>
friend Grammar operator << (const Grammar& lhs, T (*rhs)()) {
return lhs; // append rhs() to grammar
}
};
template<typename T>
class ExpressionParticle {
};
template<typename T>
ExpressionParticle<T> Expression() ;
ExpressionParticle<int> ExpressionInt();
int _tmain (int argc, _TCHAR *argv[])
{
ExpressionParticle<int> (*p)();
p = Expression<int>;
Grammar() << "p";
Grammar() << p;
Grammar() << ExpressionInt;
Grammar() << Expression<int>; // ***
Qual è il tipo di Expression<int>
se non è il tipo di p in sopra? Com'è il suo tipo diverso dal tipo di ExpressionInt
.
FWIW, questa compila con g ++ 4.4.1 –