首页 > 后端开发 > C++ > 为什么 C 会抛出'非命名空间范围中的显式专业化”错误?

为什么 C 会抛出'非命名空间范围中的显式专业化”错误?

Patricia Arquette
发布: 2024-12-23 03:31:13
原创
578 人浏览过

Why Does C   Throw an

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

尝试在命名空间之外显式专业化成员函数模板时,可能会出现 C 编译错误命名空间范围,导致消息“非命名空间范围中的显式专业化”。此问题与违反 C 标准有关,该标准要求在模板或其封闭类的命名空间内声明显式专业化。

要解决此问题,请考虑以下选项:

  • 使用正确的范围:
    显式专业化必须在其所属模板的命名空间中声明to.
  • 转发到非成员函数:
    创建一个用于专门化的自由函数,并将成员函数转发给它,如下例所示:
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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板