我试图能够使用函数编写可扩展语法,但似乎找不到接受模板函数的正确语法。我使用的是 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
.
你的代码对我来说看起来不错,g++ 也很好。这似乎是 Visual Studio 中奇怪的重载解析错误。 VS2005好像也有同样的问题。一个可能的解决方法是(用VS2005测试):
template<class T>
T id(T t) {return t; }
int main ()
{
ExpressionParticle<int> (*p)();
p = Expression<int>;
Grammar() << "p";
Grammar() << p;
Grammar() << ExpressionInt;
Grammar() << id(Expression<int>); // ***
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)