좋아, 이것은 고백하기가 정말로 어렵지만, 나는 지금부터 물려받을 강한 유혹을 받는다 std::vector
.
벡터에 대해 약 10 개의 사용자 정의 알고리즘이 필요하며 벡터의 직접 멤버가되기를 바랍니다. 그러나 당연히 나는 나머지 std::vector
인터페이스 를 원합니다 . 법을 준수하는 시민으로서의 첫 번째 아이디어 std::vector
는 MyVector
수업에 회원 을 두는 것이 었습니다 . 그러나 모든 std :: vector의 인터페이스를 수동으로 제공해야합니다. 입력하기에 너무 많습니다. 다음으로 개인 상속에 대해 생각했기 때문에 메서드를 제공하는 대신 using std::vector::member
공개 섹션에 여러 개를 작성했습니다 . 실제로 너무 지루합니다.
그리고 여기에, 나는 실제로 공개적으로 상속 할 수 있다고 생각 std::vector
하지만이 클래스를 다형성으로 사용해서는 안된다는 경고를 문서에 제공합니다. 나는 대부분의 개발자들이 이것이 다형성으로 사용되어서는 안된다는 것을 이해하기에 충분히 유능하다고 생각합니다.
내 결정이 절대적으로 정당하지 않습니까? 그렇다면 왜 그렇습니까? 추가 멤버가 실제로 멤버이지만 벡터의 모든 인터페이스를 다시 입력하지는 않는 대안을 제공 할 수 있습니까 ? 나는 그것을 의심하지만, 가능하다면 나는 행복 할 것이다.
또한 일부 바보는 다음과 같은 것을 쓸 수 있다는 사실을 제외하고
std::vector<int>* p = new MyVector
MyVector를 사용할 때 다른 현실적인 위험이 있습니까? 사실이라고 말하면 벡터에 대한 포인터를 취하는 함수를 상상하는 것과 같은 것을 버립니다 ...
글쎄, 나는 나의 사건을 진술했다. 나는 죄를 지었다. 이제 나를 용서할지 아닌지는 당신에게 달려 있습니다 :)
std::vector
의 인터페이스는 상당히 커서 C ++ 1x가 등장하면 크게 확장 될 것입니다. 그것은 몇 년 안에 타이핑하는 것이 많고 더 많이 확장 될 것입니다. 나는 이것이 봉쇄 대신에 상속을 고려해야하는 좋은 이유라고 생각합니다. 만약 그러한 기능들이 회원이어야한다는 전제를 따르는 경우 (의심 할 것입니다). STL 컨테이너에서 파생되지 않는 규칙은 다형성이 아니라는 것입니다. 그런 식으로 사용하지 않으면 적용되지 않습니다.