【发布时间】:2011-03-24 15:41:35
【问题描述】:
我正在尝试使用函数编写可扩展的语法,但似乎找不到接受模板函数的正确语法。我正在使用 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的类型有什么不同。
【问题讨论】:
-
FWIW,使用 g++ 4.4.1 编译
标签: c++ templates operator-overloading