如何在类模板外定义带额外模板参数的成员方法?
类模板外定义带额外模板参数的成员方法
你尝试的写法不符合C++语法规范,正确的定义方式需要分开声明类模板参数和成员方法的模板参数。
错误写法及报错信息
你的代码:
template<class T> class C { public: template<class S> void f(); }; template<class S, class T> void C<T>::f<S>(){}
编译报错翻译:
错误:需使用'template'关键字将'f'视为依赖模板名称 template<class S, class T> void C<T>::f<S>(){ ^ template 错误:声明的嵌套名称说明符'C<T>::'未指向类、类模板或类模板部分特化
正确写法
类模板的成员模板在类外定义时,要先声明类的模板参数,再单独声明成员方法的模板参数,具体代码如下:
template<class T> class C { public: template<class S> void f(); }; // 先声明类模板参数,再声明成员模板参数 template<class T> template<class S> void C<T>::f() {}
说明
- 成员模板属于类模板的成员,因此必须先指定类模板的实例化参数
template<class T>,再指定成员自身的模板参数template<class S>。 - 不需要在
f后添加<S>,因为成员模板的参数已经通过前面的template<class S>声明,编译器会自动关联。
内容的提问来源于stack exchange,提问作者Bubaya
相关产品推荐
相关产品推荐

