Estoy tratando de escribir una gramática extensible usando funciones, pero no puedo encontrar la sintaxis correcta para aceptar una función de plantilla. Estoy usando Visual C++ 2008. Aceptará una variable del mismo tipo que la función de plantilla, o una función similar que no sea de plantilla, pero no la función de la plantilla en sí.Operador de sobrecarga << para aceptar una función de plantilla
de error 1 error C2679: binario '< <': ningún operador encontró que toma un operando de la derecha del tipo '-función sobrecargada' (o no hay conversión aceptable) (línea
***
)
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>; // ***
¿Cuál es el tipo de Expression<int>
si no es el tipo de p de arriba? ¿Cómo es su tipo diferente al tipo de ExpressionInt
.
Fwiw, esta compila con g ++ 4.4.1 –