为什么下面的代码无效?
template <typename S, typename T>
struct B{
void f(T t, S s) {t.f<S>(s); }
};
gcc 4.3.4 抱怨它“在 '>' 标记之前需要主表达式”,即“S”不是有效的主表达式。
您需要指定f
是一个模板:
void f(T t, S s) {
t.template f<S>(s);
}
C++ 不知道这一点(此时),因为f
的类型取决于模板参数的类型T
。此外,以下语法将是不明确的:<
是指模板列表的开始还是小于运算符?为了帮助 C++ 解决这个问题,你需要指定f
是一个模板,否则C++无法解析下面的部分,因为解析自身取决于类型T
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)