특정 클래스가 해당 클래스의 인터페이스의 일부로 컨테이너를 가질 때마다 한 번 typedef됩니다. 그런 다음 그 클래스를 사용할 필요가있는 누군가는 "FooVec"이 많은 fus없이 Foo의 std :: vector라는 것을 쉽게 알아 냈습니다.
namespace bar
{
typedef std::vector<const Foo> FooVec;
class CAnotherClass
{
CAnotherClass(FooVec&)
{
...
}
}
};
나 '간단한 일이 : 당연히 문제가 동료가 자신의 클래스에 대한 FooVec을 재정의하는 경우에 제공
namespace bar
{
typedef std::vector<Foo> FooVec;
class CClass
{
CClass(FooVec&)
{
...
}
};
}
:
그러나, 이것은 불완전한 솔루션입니다, 다음 코드를 고려 이 문제를 해결할 수있는 방법은 네임 스페이스/라이브러리/관련 클래스 그룹 당 약 하나의 공통 포함을 사용하는 것입니다. 따라서 다른 사람이 bar 네임 스페이스의 어떤 것에 typedef를 추가하면, 한 곳에서 모든 것을 가질 수 있습니다. IE는 :
barTypes.h
namespace bar
{
typedef std::vector<Foo> FooVec;
typedef std::vector<const Foo> FooConstVec;
}
클래스의 작은 세트 (즉, 당 네임 스페이스) 당 하나의 헤더로 유지함으로써 당신은 형식 정의로 가득 찬 거대한 파일을하지 않습니다. 그것은 여전히 사용자에게 클래스 인터페이스의 일부인 유형에 대한 좋은 가시성을 제공합니다. 일단이 머리말이 확립되면, 추가 된 typedef를 설정하는 대신 팀에서 규율을 유지하기 만하면됩니다.
빌드 성능에 대해 항문 인 경우이 헤더를 precompiled header의 일부로 갖고 싶을 수도 있습니다.
두 번째 부분은 본질적으로 내가 한 일입니다. 정보 주셔서 감사합니다. 하나의 다른 관련없는 질문, 전역 상수 대 클래스 변수 (invariants)? 클래스 변수가 선호된다고 가정하고 있지만,이 가정에서는 맞습니까? – trikker
가장 선호하는 (나에 의해) 최저 필요한 범위로 값을 제한합니다. IE는 함수에서만 사용되는 경우 함수입니다. 클래스 전반에 걸쳐 사용되는 경우 해당 클래스에 대해 정의하십시오. 기타... –