模板类的成员函数:模板函数的调用
在 C 中,当尝试调用以下成员函数时会出现特殊的编译错误模板函数中的模板类,无需显式指定 template 关键字。考虑以下代码:
template<class X> struct A { template<int I> void f() {} }; template<class T> void g() { A<T> a; a.f<3>(); // Error! }
编译器在第 18 行遇到错误,表明成员函数的名称无法识别。这是因为,正如 C 标准 (14.2/4) 中所述,在某些场景下调用时,成员模板特化的名称必须以 template 关键字为前缀。
要纠正该问题,只需修改代码显式包含 template 关键字:
template<class T> void g() { A<T> a; a.template f<3>(); // Add `template` keyword here }
更新的代码编译成功,因为它符合标准的要求,指定在上下文中使用成员模板的名称时必须使用 template 关键字进行限定模板函数。
以上是为什么从模板函数调用模板类的成员函数时需要“template”关键字?的详细内容。更多信息请关注PHP中文网其他相关文章!