2009-07-20 4 views
1

일반적인 질문 : 일반적으로 클래스, 네임 스페이스가 정의됩니다.복잡한지도에 대한 typedef는 어디에 정의합니까?

내 경우 :에

std::map<const std::pair<string, string>,const string*> 

내가 어디 공공 장소에서 (클래스에 넣어 좋은 장소입니다 궁금 :) 나 : 만이 내 클래스 구현에 매핑 사용하고

둘러싸는 헤더 파일? 당신이이 일을 지정하려면 대부분의 것들과 마찬가지로,

class Foo 
{ 
public: 
    void some_functions(void); 

private: 
    typedef std::pair<std::string, std::string> StringPair; 
    typedef std::map<StringPair, std::string> StringPairMap; 

    StringPairMap _stringMap; 
} 

명확히하려면 : 그것은 단지 클래스에 있으면 나는 일반적으로 민간 부분의 상단에 넣어, 네임 스페이스를

답변

11

이 없습니다 가능한 한 지역적으로. 변수는 다음과 같이해야합니다. 루프에 도달 할 때까지 for 루프에 대해 int i을 정의하지 마십시오.

마찬가지로 클래스가 이러한 typedef를 내부적으로 사용하는 경우 위에서 설명한대로 수행하십시오. 클래스의 특정 함수 만 typedef를 필요로하는 경우 해당 함수의 시작 부분에 typedef를 두십시오.

클래스의 클라이언트에게이 typedef를 노출해야하는 경우 typick을 public 섹션의 맨 위에 배치하고 싶습니다.

+1

나는 상상할 수 있지만, 매개 변수 목록에 'void'가 있으면 내 눈이 아프다. – avakar

+1

나는 항상 더 명확하게 발견했습니다. 이 함수 호출은'int i = perform_calc()'입니다. 거기에'void '가 없으므로 거기에'void'를 넣어서 함수를 읽을 때 더 이상 문맥을 기억할 필요가 없습니다 ("this는 함수 호출 또는 함수 정의입니까?") – GManNickG

+0

void를 들여다 보았을 때, 너에게로 돌아 가라. – Eugene

1

어디서나 사용하십시오. 헤더 파일의 private 섹션에서 사용한다면 거기에 typedef를 선언하십시오. .cpp 파일의 구현 코드에서만 사용하는 경우 typedef를 선언하십시오.

0

다릅니다. 클래스에 대한 공용 인터페이스와 마찬가지로이 유형이 필요합니까? 그렇다면 클래스의 public 섹션 안에 선언 할 것입니다. 클래스의 비공개 부분에서만 사용한다면 거기에 선언하십시오. 그리고 구현에만 사용한다면 거기에 선언하십시오. 일반적으로 헤더 파일의 전역 네임 스페이스에서 선언하지 마십시오 (충돌하지 않는 이름 앞에 접두어를 붙이면 안됩니다).

여기서 경험 법칙은 가능한 한 프로그램의 가장 작은 하위 집합에서 감속을 볼 수 있도록 설정하는 것입니다.

관련 문제