문제

네임 스페이스에서 클래스를 정의하는 더 간결한 방법이 있습니까?

namespace ns { class A {}; }

나는 같은 것을 바라고 있었다 class ns::A {}; 효과가 있지만 아아 아닙니다.

도움이 되었습니까?

해결책

당신은 가깝고 네임 스페이스에서 클래스를 선언 한 다음 원하는 경우 외부를 정의 할 수 있습니다.

namespace ns {
    class A; // just tell the compiler to expect a class def
}

class ns::A {
    // define here
};

당신이 할 수없는 것은 멤버없이 네임 스페이스의 클래스를 정의한 다음 네임 스페이스 밖에서 클래스를 다시 정의하는 것입니다. 그것은 하나의 정의 규칙을 위반합니다 (또는 somesuch nonsense).

다른 팁

당신은 그렇게 할 수 있지만 실제로는 더 멍청하지 않습니다.

namespace ns {
    class A;
}

class ns::A {
};

또는

namespace ns {
    class B;
}

using ns::B;
class B {
};

당신이 읽어야 할 섹션은 이것입니다.

7.3.1.2 네임 스페이스 멤버 정의

3 네임 스페이스에서 처음 선언 된 모든 이름은 해당 네임 스페이스의 구성원입니다. [...

참고 - D.Shawley (및 그의 예)가 정확합니다.

아니요. C ++ 표준, 섹션 3.3.5를 인용하기 위해 :

이름이 지정된 이름 또는 이름이없는 네임 스페이스 (7.3), 블록 (6.3), Fun (8.3.5), 기능 정의 (8.4) 및 클래스 (9 항)에 전역 네임 스페이스 범위가 있습니다.

따라서 선언은 네임 스페이스 블록 안에 있어야합니다. 정의는 물론 외부에있을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top