首页 > 后端开发 > C++ > 为什么 C 模板类中成员函数的显式特化会导致'非命名空间作用域”错误?

为什么 C 模板类中成员函数的显式特化会导致'非命名空间作用域”错误?

Mary-Kate Olsen
发布: 2024-12-04 06:15:17
原创
1008 人浏览过

Why Does Explicit Specialization of a Member Function in a C   Template Class Cause a

非命名空间范围内的显式专业化

查询:

在 C 模板类中CConstraint,为什么编译器会在以下情况下生成错误“非命名空间范围中的显式专业化”成员函数是显式特化的?

响应:

出现此问题的原因是 CConstraint 中的显式特化未在命名空间内声明。根据 C 03 标准第 14.7.3/2 节,显式专业化必须驻留在模板的命名空间内,或者对于成员模板,位于封闭类或类模板的命名空间内。

此外,C 03 部分14.7.3/3 限制成员函数的显式特化,除非包含类本身是显式的

解决方案:

要解决此问题,一种方法是将 verify() 成员函数转发到单独命名空间中定义的专用自由函数,如下所示如下图:

namespace detail {
    template <typename TL> void Verify(int, int[]) {}
    template <>            void Verify<int>(int, int[]) {}
}

template<typename T> class CConstraint {
    // ...
    template <typename TL> void Verify(int position, int constraints[]) {
        detail::Verify<TL>(position, constraints);
    }
};
登录后复制

以上是为什么 C 模板类中成员函数的显式特化会导致'非命名空间作用域”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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