J'essaie de pouvoir écrire une grammaire extensible en utilisant des fonctions, mais je n'arrive pas à trouver la bonne syntaxe pour accepter une fonction gabarit. J'utilise Visual C++ 2008. Il acceptera une variable du même type que la fonction template, ou une fonction non-template similaire, mais pas la fonction template elle-même.Opérateur de surcharge << pour accepter une fonction de gabarit
erreur 1 Erreur C2679: binaire '< <': aucun opérateur trouvé qui prend un opérande de droite de type 'fonction surchargée' (ou il n'y a pas de conversion acceptable) (ligne
***
)
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>; // ***
Quel est le type de Expression<int>
si ce n'est pas le type de p ci-dessus? Comment est son type différent du type de ExpressionInt
.
FWIW, cette compile avec g ++ 4.4.1 –