Хорошо, это действительно трудно признаться, но у меня сейчас есть сильное искушение унаследовать 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 - они не полиморфны. Если вы не используете их таким образом, это не относится.