【发布时间】:2009-12-09 23:26:58
【问题描述】:
刚才我不得不在网站上挖掘一下,为什么模板类模板成员函数会出现语法错误:
template<class C> class F00 {
template<typename T> bar();
};
...
Foo<C> f;
f.bar<T>(); // syntax error here
我现在意识到模板括号被视为关系运算符。要执行预期的操作,需要以下奇怪的语法,参见Templates: template function not playing well with class's template member function:
f.template bar<T>();
您还遇到过哪些 C++/C++ 模板的奇怪方面和陷阱,您认为这些不是常识?
【问题讨论】:
-
顺便说一句,您可能只想将其限制为模板陷阱,对于一般 C++ 陷阱还有另一个问题。
-
template<typename T> bar();有什么返回类型? -
你的假设是错误的。您在这里不需要
template,因为f不是从属名称。无论如何,它取决于什么?对于Foo<C>类型的对象,它是一个未指定范围内的名称。