"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > C ++ 클래스 멤버의 명시 적 전문화가 네임 스페이스 밖에서 실패하는 이유는 무엇입니까?

C ++ 클래스 멤버의 명시 적 전문화가 네임 스페이스 밖에서 실패하는 이유는 무엇입니까?

2025-04-18에 게시되었습니다
검색:142

Why Does Explicit Specialization of Class Members Fail Outside a Namespace in C  ?

템플릿 클래스 CCOSTRAINT { // ... 템플릿 void verify (int position, int constraints []) { } 템플릿 void verify (int, int []) { } };

G로 컴파일 할 때이 코드는 오류가 발생합니다. 위의 예에서, CCOSTRAINT는 네임 스페이스 내부에 선언되지 않으므로 의 명시 적 전문화는 유효하지 않습니다.

VC 컴파일러는이 경우 네임 스페이스 범위 외부의 명시 적 전문화를 허용합니다. 이 동작은 비표준이며 의존해서는 안됩니다.

template
class CConstraint
{
    // ...

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

    template 
    void Verify(int, int[])
    {
    }
};
솔루션 :

template
class CConstraint
{
    // ...

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

    template 
    void Verify(int, int[])
    {
    }
};

template
class CConstraint
{
    // ...

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

    template 
    void Verify(int, int[])
    {
    }
};

는 특수화 된 템플릿과 동일한 네임 스페이스 내에서 명시 적 전문화가 선언되어야합니다. 다음은 코드의 수정 된 버전입니다 :
template
class CConstraint
{
    // ...

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

    template 
    void Verify(int, int[])
    {
    }
};
namespace mynamespace { 템플릿 클래스 CCOSTRAINT { // ... 템플릿 void verify (int position, int constraints []) { } 템플릿 void verify (int, int []) { } }; }

Why Does Explicit Specialization of Class Members Fail Outside a Namespace in C  ?

myNamespace 네임 스페이스 내에서 cconstraint를 캡슐화하여 해당 네임 스페이스 내에서 명백한 전문화가 선언되어 컴파일 오류를 해결합니다. 답 :

네임 스페이스 세부 사항 { 템플릿 void verify (int, int []) {} 템플릿 void verify (int, int []) {} } 템플릿 class cconstraint { // ... 템플릿 void verify (int position, int constraints []) { 세부 사항 :: (위치, 제약 조건); } };

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3