Я пытаюсь написать расширяемую грамматику, используя функции, но не могу найти правильный синтаксис для принятия шаблонной функции.Я использую Visual C ++ 2008. Он будет принимать переменную того же типа, что и функция шаблона, или похожую функцию без шаблона, но не саму функцию шаблона.
Ошибка 1 ошибка C2679: двоичный файл «<<»: не найден оператор, который принимает правый операнд типа «перегруженная функция» (или нет допустимого преобразования) (строка <code>***)
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
.