Я пытаюсь смочь записать расширяемую грамматику с помощью функций, но, может казаться, не нахожу правильный синтаксис для принятия шаблонной функции. Я использую Visual C++ 2008. Это примет переменную того же типа как шаблонная функция, или подобная нешаблонная функция, но не сама шаблонная функция.
Ошибка 1 ошибка C2679: двоичный файл' <<': никакой оператор не нашел, который берет правый операнд типа 'перегруженная функция' (или нет никакого приемлемого преобразования) (строка
***
)
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>; // ***
Из чего тип Expression<int>
если это не тип p в вышеупомянутом? Как его тип отличается от типа ExpressionInt
.