템플릿 매개 변수를 기반으로 복잡한 데이터 구조를 사용하는 템플릿 기능 fct
이 있습니다. 또한 별도의 helpers
네임 스페이스에있는 일부 도우미 함수 (동일한 유형으로 템플릿 됨)를 호출하고 동일한 복합 데이터 구조를 사용합니다. 템플리트 된 네임 스페이스 및 typedef는 비공식 - 해결 방법입니까?
namespace helpers {
template<class T>
void h1(const std::vector< std::vector< std::map<T, std::set<T> > > >& bar){
// ...
}
}
template<class T>
void fct(const std::vector< std::vector< std::map<T, std::set<T> > > >& bar){
// ...
helpers::h1(bar);
}
가 지금은 모든 기능을 사용할 수있는 하나의 형식 정의를 사용하여, 그것은 예쁘게 만들고 싶어 : 우리는 모든 기능에 액세스 할 수있는 복합 형에 대해 하나의
typedef
을 할 수 없기 때문에 지금은 정말 추한 가져옵니다.
A는 좋은 것 typedef
을 템플릿 있지만 허용하지 않는다 :
template<class T>
typedef std::vector< std::vector< std::map<T, std::set<T> > > > Bar;
또 다른 해결책은 내가 템플릿 namespace
이 모든 기능을 포장, 생각하지만, 그 C에서 허용하지 않는다 될 것 ++ 중 하나 (I를 그것이`C++ 0x '에있을 것이라고 들었습니다 ...).
물론 템플릿 기반 클래스가 있지만 실제로 사용자가 객체를 만들고 멤버 함수를 호출해야하는 것은 아닙니다.
template<class T>
class All {
typedef std::vector< std::vector< std::map<T, std::set<T> > > > Bar;
static void fct(const Bar& bar){
// ...
h1(bar);
}
private:
static void h1(const Bar& bar){
// ...
}
};
내 질문은 : 내 코드의 대부분이 그렇게 구성되어 있다면 그것은 아마 조금 재미 그래서 내가 사용 결국 해결 방법은 모든 멤버 함수가 static
을 어디에 템플릿 기반 클래스를 사용했다? 결국 정적 멤버 함수만으로 많은 클래스를 가지는 것이 약간 이상한가요? "templated typedef"/ "templated namespace"를 가능하게하는 다른 해결책/해결 방법이 있습니까?
중복 된 http://stackoverflow.com/questions/251432/typedefs-for-templated-classes. –