2017-12-20 4 views
2

내가 다음과 같이 정의 할당과 표준 : : 벡터 클래스를 사용하는 사용자 지정 벡터 클래스를 정의하고 싶습니다해야합니다 이 같은 :템플릿 형식 정의 사용자 정의 할당

my_vector<std::string> v; 

++ 2.95.3 Solaris 10의 컴파일러가

template declaration of `typedef class vector<T,MyLib::MyAlloc<T1> > my_vector' 
aggregate `class my_vector<basic_string<char,string_char_traits<char>,__default_alloc_template<false,0> > > v' has incomplete type and cannot be initialized 

이 t를 해결하는 데 도움이 바랍니다한다는 불만을 내 g 그는 발설했다.

+0

오류 메시지에는 .... .... MyLib :: MyAlloc 하지만 코드에는 'T1'이 없습니다. 이것이 실제로 코드와 오류 메시지 인 경우 매우 이상합니다. – user463035818

+0

@ tobi303도 혼동 스럽네요. –

답변

2

C++ (11)는 "새로운"유형 별칭 구문이 지원 : "오래된"형태 (typedef가) 별칭 템플릿을 생성하는 데 사용할 수 없습니다

template <class T> 
using my_vector = std::vector<T, MyLib::MyAlloc<T> >; 

.


C++ 11 이상은 옵션이 아닙니다.

template <class T> 
struct my_vector : std::vector<T, MyLib::MyAlloc<T> > {}; 

하는 것이 될 수있다 : std::vector는 클래스 타입이기 때문에,

my_vector<std::string>::type v; 

또는이처럼 사용할 수 있습니다

template <class T> 
struct my_vector { 
    typedef std::vector<T, MyLib::MyAlloc<T> > type; 
}; 

: 유일한 의지는 템플릿 메타 기능입니다 원래 사용하길 원했던대로 사용되었습니다.

+0

이 경우 제 컴파일러는 이전 C++ 11, g ++ 2.95.3 –

+0

@ Dr.DebasishJana - 그럼 별칭은 직접 사용할 수 없습니다. 내 편집을 참조하십시오. – StoryTeller

+0

예, 2.95.3에서는 정상이지만 my_vector에 대해 push_back 등의 멤버 함수를 재정의해야합니까? –