템플릿 클래스 (예 : 벡터)를 확장하려면 어떻게해야합니까? 아래 코드는 작동하지 않습니다. 컴파일러는 'Vector'가 템플릿이 아님을 고발합니다.클래스 템플릿 확장
template <typename T>
class Vector<T> : public std::vector<T>
{
public:
void DoSomething()
{
// ...
}
};
템플릿 클래스 (예 : 벡터)를 확장하려면 어떻게해야합니까? 아래 코드는 작동하지 않습니다. 컴파일러는 'Vector'가 템플릿이 아님을 고발합니다.클래스 템플릿 확장
template <typename T>
class Vector<T> : public std::vector<T>
{
public:
void DoSomething()
{
// ...
}
};
구문이 잘못되었습니다. 당신은 사용할 필요가 : 다른 이유로 그들은 가상 소멸자를 가지고 있지 않기 때문에 경우 말했다
template <typename T>
class Vector : public std::vector<T>
, 당신은, 상속을 통해 표준 라이브러리 컨테이너를 확장 안되며, 따라서 본질적으로 안전하지는 않습니다.
std::vector
을 "향상"하려면 구성 (예 : std::vector
멤버 변수)을 사용하거나 비회원 기능을 사용하여 추가 기능을 제공하십시오.
가상 멤버가없는 경우 STL Container에서 상속하는 것이 좋습니까? –
다른 클래스를 확장하는 것과 아무런 관련이 없습니다. 문제는 자신의 파생 클래스입니다.
는이 같은 클래스 템플릿을 정의
template <typename T>
class Vector
{
...
하지
template <typename T>
class Vector<T>
{
...
jalfi가 맞습니다 : class Vector
이것은 전문화를위한 구문이므로 컴파일러는'Vector'에 대한 기본 템플릿을 보았습니다. – UncleBens
당신은 표준 라이브러리 컨테이너에서 상속 안된다. 그들은 그것을 위해 설계되지 않았습니다. 예를 들어 가상 소멸자가 없으므로 조심하지 않으면 파생 벡터가 파기 될 때 코드가 손상됩니다. – jalf