”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > C++类成员显式特化为何在命名空间外失败?

C++类成员显式特化为何在命名空间外失败?

发布于2025-04-18
浏览:224

Why Does Explicit Specialization of Class Members Fail Outside a Namespace in C  ?
在命名空间范围外的显着专业:非标准G

c模板编程中的一个错误涉及对高效代码生成的类成员的明确专业化。但是,如以下代码段所示,显式专业的放置至关重要: Template 班级 { // ... 模板 void验证(int位置,int约束[]) { } 模板 void verify (int,int []) { } }; 在使用G进行编译时,此代码会导致错误:

在非Namespace范围范围'class cconstraint'

了解此错误。在上面的示例中,在任何名称空间内都没有声明cconstraint,因此verifie 的明确专业化是无效的。

VC编译器,但是在这种情况下,允许在命名空间范围之外进行明确的专业知识。这种行为是非标准的,不应依靠。
template
class CConstraint
{
    // ...

    template 
    void Verify(int position, int constraints[])
    {
    }

    template 
    void Verify(int, int[])
    {
    }
};
解决此问题并确保符合C标准,必须在同一名称空间中声明其为他们专业的模板,必须在同一名称空间内声明明确的专业。这是代码的更正版本:

名称空间mynamespace { 模板 班级 { // ... 模板 void验证(int位置,int约束[]) { } 模板 void verify (int,int []) { } }; }

通过在mynamespace名称空间内封装Cconstraint,我们确保在该命名空间内也声明其明确的专业知识,从而解决了汇编错误。
Explicit specialization in non-namespace scope 'class CConstraint'
名称空间详细信息{ template void verify(int,int []){} template void verify (int,int []){} } 模板 class cconstraint { // ... template void verify(int位置,int限制[]){ 详细信息::验证(位置,约束); } };

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3