2010-12-16 2 views
-1

함수 내부에서 클래스를 정의하여 서로에 대해 "알 수"있도록하려면 어떻게해야합니까? 여기에 내가 이해하려고 노력하고있는 것의 매우 실망한 버전이있다. 나는 다음과 같은 것을하고 싶다.함수 내에서 선언 된 상호 C++ 클래스

void foo() { 

    struct A { 
     static void bar() { 
      B::hmm(); 
     } 
    }; 

    struct B { 
     static void hmm() { 
      A::bar(); 
     } 
    } 
} 

A :: bar()가 B에 대해 아직 모르기 때문에 그 방법이 작동하지 않는다. 함수 밖에서 B가 선언 될 때까지 A :: bar()의 정의를 연기 할 수 있습니다. 예 :

void foo() { 

    struct A { 
     static void bar(); 
    }; 

    struct B { 
     static void hmm() { 
      A::bar(); 
     } 
    } 

    void A::bar() { 
     B::hmm(); 
    } 
} 

하지만 내부에서 작동하지 않는 것 같습니다.

이 모든 기능을 수행하는 영리한 범위 지정 선언 대신 C++ (참조하시기 바랍니다)에서이 기능을 사용할 수 없다는 확실한 답변도 환영합니다.

내가 거기에 (예를 들어, foo는 외부 클래스를 선언)이 문제를 해결하는 다른 방법은, 그래서 비슷한 작업을 수행하는 방법에 대한 해답을 찾는 게 아니에요 알고

...

+0

왜 네임 스페이스를 사용할 수 없습니까? – GWW

+0

@GWW, 당신은 내 마지막 문장을 읽지 않았다. – xscott

+0

나는 그것을 읽었지 만 네임 스페이스를 사용할 수없고 함수를 사용해야하는 이유가 궁금합니다. – GWW

답변

3

당신은 돈 ' 티.

로컬 클래스의 멤버 함수는 클래스 정의 내에 정의해야합니다.

A::bar()B::hmm()의 정의가 상호 의존적이기 때문에 구성원 함수를 클래스 정의 외부에서 선언 할 수 없으므로 정의를 정렬 할 수 없으므로 작동 할 수 있습니다.

(필자는 대안을 찾고있는 것은 아니지만 필자는 필자의 의견으로는 원격으로 복잡한 클래스를 정의하고, 더 많거나 적은 여러 클래스를 함수 정의 내에서 정의함으로써 코드 가독성을 저해하고 나쁜 아이디어.)

+0

답장을 보내 주셔서 감사합니다. IBM 사이트에서 기본적으로 동일한 내용의 문서를 발견했습니다. "local class"라는 구절은 Google 검색에서 누락 된 부분입니다. 그러나 스타일이나 가독성에 대한 질문이 아니므로 마지막 비트를 삭제하면 답변에 대한 크레딧을 줄 것입니다. – xscott

+2

@xscott : 가독성에 대한 설명이 중요하다고 생각합니다. 물론 원하지 않으면이 대답을 받아들이지 않아도됩니다. –

관련 문제