首页 > 后端开发 > C++ > 如何正确显式地特化模板类中的成员函数?

如何正确显式地特化模板类中的成员函数?

Barbara Streisand
发布: 2024-12-03 01:33:14
原创
132 人浏览过

How to Correctly Explicitly Specialize Member Functions in Templated Classes?

类模板中成员函数的显式特化

使用类模板时,成员函数的显式特化是一个常见的要求。但是,在类模板本身成为模板的情况下,可能会因不正确的方法而出现错误。

考虑以下场景:

template <class C> class X
{
public:
   template <class T> void get_as();
};

template <class C>
void X<C>::get_as<double>()
{
}
登录后复制

此代码尝试显式特化成员double 类型的类模板 X 的函数。但是,当 X 本身成为模板时,编译器会报告错误:

error: template-id 'get_as<double>' in declaration of primary template
error: prototype for 'void X<C>::get_as()' does not match any in class 'X<C>'
登录后复制

解决方案是也显式特化周围的类模板。这可以通过向专门的成员定义添加一个空模板参数来完成:

template <> template <>
void X<int>::get_as<double>()
{
}
登录后复制

这将仅针对 X 专门化成员函数。

或者,可以使用重载以实现所需的行为:

template <class C> class X
{
   template<typename T> struct type { };

public:
   template <class T> void get_as() {
     get_as(type<T>());
   }

private:
   template<typename T> void get_as(type<T>) {
   }

   void get_as(type<double>) {
   }
};
登录后复制

此方法依赖于模板专门化来选择适当的 get_as()重载,确保按预期应用双精度类型特化。

以上是如何正确显式地特化模板类中的成员函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板