Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Наследование от контейнера STL. |
Автор: andrew_121 25.5.2009, 00:38 |
Опять сабж. Для работы со строками приходится пользоваться алгоритмами. Надоело постоянно вписывать бегины/энды. Написал свой класс наследник std::string. Знаю что прямое наследование от STL контейнеров не лучшая идея. Интересует Ваше мнение. Хорошо? Плохо? Почему? Спасибо! |
Автор: Earnest 25.5.2009, 08:15 |
Гуру считают, что плохо. Вообще наследование от конкретных классов плохо. В основном, вопросы поддержки. Со временем функциональность расползается (как в базовом классе, если он конкретный, так и в производном), проект теряет четкость, существенные изменения становится трудно вносить... Как раз в этом смысле более безопасно наследование от стандартных классов (т.к. они не меняются). Но не кошерно. Лучше уж обертку сочинить. Но, ИМХО, иногда, если аккуратно и локально, то можно... Кстати, твоя аргументация (зачем тебе наследоваться от string, begin\end не нравятся) как-то неубедительна. Во-первых, у строки куча своих алгоритмов, во вторых, стандартные алгоритмы все через begin\end работают - чего разнобой вносить.... И т.д. |
Автор: mrbrooks 25.5.2009, 08:32 |
зачем? |
Автор: mes 25.5.2009, 08:51 | ||||
Не будет полиморфного удаления, так как базовый деструктор не виртуальный.
а сделать набор функций оберток над алгоритмами ? Имхо, плохо (но для общего случая.. чтоб сказать конкретно, надо видеть, чего Вы написали.) |
Автор: azesmcar 25.5.2009, 09:09 | ||
Почитайте Саттера - особенно главу - Ослабленная монолитность std::string. В нем и так до хрена функций а вы еще хотите добавить ![]() Классы СТЛ не писали в расчете не наследование. Открыто наследовать классы не предназначенные для этого - неправильно (мое лично мнение). Закрытое наследование - вполне приемлемо. |
Автор: Alek86 25.5.2009, 09:21 |
а заюзать, наконец, буст? в частности, "Boost String Algorithms Library";) andrew_121, или буст или напиши враппер, что будет делать то, что тебе нужно |
Автор: Earnest 25.5.2009, 09:27 |
Или просто набор глобальных функций, которые будут принимать строку. Это лучше, чем наследовать класс. |
Автор: andrew_121 25.5.2009, 09:42 | ||||||||
Да, и в правду. Не подумал об этом. Тогда лучше boost::string_algo заюзать.
|
Автор: mes 25.5.2009, 11:47 |
ну и зачем Вам наследовать интерфейс класса std::string ? ради метода length () и нескольких тайпдефоф ? не легче ли просто открыть к нему доступ, через метод ? (например так std::string& LString::std(); и для const). как минимум избавитесь от путаницы методов. |