2010-04-29 7 views
2

템플릿 클래스 (예 : 벡터)를 확장하려면 어떻게해야합니까? 아래 코드는 작동하지 않습니다. 컴파일러는 'Vector'가 템플릿이 아님을 고발합니다.클래스 템플릿 확장

template <typename T> 
class Vector<T> : public std::vector<T> 
{ 
public: 
    void DoSomething() 
    { 
     // ... 
    } 
}; 
+6

당신은 표준 라이브러리 컨테이너에서 상속 안된다. 그들은 그것을 위해 설계되지 않았습니다. 예를 들어 가상 소멸자가 없으므로 조심하지 않으면 파생 벡터가 파기 될 때 코드가 손상됩니다. – jalf

답변

19

구문이 잘못되었습니다. 당신은 사용할 필요가 : 다른 이유로 그들은 가상 소멸자를 가지고 있지 않기 때문에 경우 말했다

template <typename T> 
class Vector : public std::vector<T> 

, 당신은, 상속을 통해 표준 라이브러리 컨테이너를 확장 안되며, 따라서 본질적으로 안전하지는 않습니다.

std::vector을 "향상"하려면 구성 (예 : std::vector 멤버 변수)을 사용하거나 비회원 기능을 사용하여 추가 기능을 제공하십시오.

+0

가상 멤버가없는 경우 STL Container에서 상속하는 것이 좋습니까? –

6

다른 클래스를 확장하는 것과 아무런 관련이 없습니다. 문제는 자신의 파생 클래스입니다.

는이 같은 클래스 템플릿을 정의

template <typename T> 
class Vector 
{ 
... 

하지

template <typename T> 
class Vector<T> 
{ 
... 
+0

jalfi가 맞습니다 : class Vector 은 Java 구문이며 C++ 구문은 아닙니다. –

+0

이것은 전문화를위한 구문이므로 컴파일러는'Vector'에 대한 기본 템플릿을 보았습니다. – UncleBens