2014-10-23 1 views
0

최근 모듈의 일부분을 디자인하려고했습니다. 내 문제는 이름을 지어서 이름을 지키는 것이 었습니다. 이름/주소가 클래스에 쉽게 들어가고 클래스의 목적에 대해 알아야 할 모든 것을 말하도록했습니다. 첫 번째 아이디어는 라는 이름의 인터페이스 (추상 클래스)를 만드는 것이었다 그리고 난 같은 코드 것이다 있도록 다음 네임 스페이스에 는, 클래스를 생성 :C++ inherting enclosing class -이 좋은 연습입니까?

Foo* foo = Foo::Bar(); 

을하지만 우리는 네임 스페이스와 클래스를 모두 만들 수 없습니다 같은 이름. 그래서 또 다른 방법은 클래스를 둘러싸는 같은 인터페이스를 만드는 것이 었습니다 그리고 그 안에 지정된 클래스 (자신의 선언을) 놓고, 나중에 그 지정된 클래스 정의

class A { 
    public: 
     void foo() = 0; 

     class B; 
     class C; 
}; 

class B : public A { 
    // 
}; 

class C : public A { 
    // 
}; 

클래스와 인터페이스 종로 이런 종류의 경우 내가 궁금하네요을 좋은 연습? 아니면 내가 뭔가 다른/절대 기본 클래스에 대한 나쁜 명명 신경 쓰지해야합니까?

pro의 이름입니다. 예를 들어 - - - 내가 예외 시스템으로 사용하는 경우 I는 다음과 같이 코드를 작성할 수 있습니다 :

Exception* exception = new Exception::IllegalArgument(); 

대신 :

Exception::Interface* exception = new Exception::IllegalArgument(); 

을하지만 난이 나타났습니다 큰 사기도 있습니다. 나는 다음과 같이 쓸 수있다 :

Exception::IllegalArgument::Exception::IllegalArgument::Exce... exception; 

그런데 어떻게 생각하니? 그것은 유형과 끝없는 반복, 아니면 내가 다른 전략에 대해 생각해야합니까 okey와 냉담한 마음입니까?

답변

0

그것은 무관심한 연습입니다.

나는 그것이 당신을 그다지 많이 사지는 못하며, 정말로 단점도 없다는 것을 의미합니다.

여전히 표준은 동일한 네임 스페이스에 함께 모으고 완료됩니다.

"깨끗하게 보입니다."그리고 계층 구조를 변경하면 적어도 유혈 사태없이 끝내게 될 것입니다.

+0

Okey, 그래서 하나의 네임 스페이스를 생성하고 거기에 관련된 모든 것을 던지기를 원한다면, 그와 같은 다른 패턴을 추천 할 수 있을까요? (하나의 기본 클래스와 많은 파생 된 클래스 또는 심지어 일부 계층 구조)? – RippeR

관련 문제