предположим, я часто делаю какую-то операцию с std::string, и хотел бы к нему добавить методы.
Можно это сделать так:
struct my_string: public std::string //забудем пока про basic_string<C, T, A>, вопрос про misused
{
//повторяю конструкторы std::string
...
//добавляю свои 'удобные методы'
};
template <class T>
struct my_vector: std::vector<T>
{
};
какие причины есть считать это злом? Нутром чую, что это путь в ад, но пока не вижу конкретных плохих вещей. Едиственное что, вижу проблему когда кто-то захочет вдруг передать std::string в функцию, которая принимает my_string.
Все книжки пишут, естли можете сделать операцию на объектом свободной функцией, а не методом, то лучше методом. Я с этим согласен.
Хотелось бы точно понять, какие грабли есть вот в таком наследовании. (Предположим, что в проекте используется только один такой наследник, и других библиотек, которые так расширили строки, нет)
Собственно — это вторая проблема — когда каждая либа начиная клепать свой такой свой string. предположим, что она одна и основная в проекте.
Перечислите, пожалуйста, как можно больше бяк, почему такое наследование некошерно. ^_^
Спасибо.
PS. Наверное, я не прочитал какую-то книжку. Но протелепатировал себе мысль из неё