Оператор Overloading <<для принятия шаблонной функции

Я пытаюсь смочь записать расширяемую грамматику с помощью функций, но, может казаться, не нахожу правильный синтаксис для принятия шаблонной функции. Я использую 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.

5
задан Vinko Vrsalovic 3 August 2010 в 10:08
поделиться