Хорошо, это действительно трудно признаться, но у меня сейчас есть сильное искушение унаследовать от std::vector
.
Мне нужно около 10 пользовательских алгоритмов для вектора, и я хочу, чтобы они были непосредственно членами вектора. Но, естественно, я хочу иметь и остальную часть интерфейса std::vector
. Ну, моя первая идея, как законопослушного гражданина, состояла в том, чтобы иметь std::vector
члена в MyVector
классе. Но тогда я должен был бы вручную повторно предоставить весь интерфейс std :: vector. Слишком много, чтобы напечатать. Затем я подумал о частном наследовании, так что вместо повторного предоставления методов я бы написал группу using std::vector::member
в открытом разделе. Это слишком утомительно на самом деле.
И вот, я действительно думаю, что могу просто публично наследовать от std::vector
, но в документации даю предупреждение, что этот класс не следует использовать полиморфно. Я думаю, что большинство разработчиков достаточно компетентны, чтобы понять, что это не следует использовать полиморфно в любом случае.
Мое решение абсолютно неоправданно? Если так, то почему? Можете ли вы предоставить альтернативу, которая будет иметь дополнительные члены на самом деле члены, но не будет включать в себя перепечатывание всего интерфейса вектора? Я сомневаюсь в этом, но если вы можете, я просто буду счастлив.
Кроме того, кроме того, что какой-то идиот может написать что-то вроде
std::vector<int>* p = new MyVector
Есть ли какие-либо другие реалистичные опасности в использовании MyVector? Говоря реалистично, я отказываюсь от таких вещей, как представить себе функцию, которая принимает указатель на вектор ...
Ну, я изложил свой случай. Я согрешил. Теперь ты должен простить меня или нет:)