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