![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Опять сабж.
Для работы со строками приходится пользоваться алгоритмами. Надоело постоянно вписывать бегины/энды. Написал свой класс наследник std::string. Знаю что прямое наследование от STL контейнеров не лучшая идея. Интересует Ваше мнение. Хорошо? Плохо? Почему? Спасибо! -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Гуру считают, что плохо. Вообще наследование от конкретных классов плохо.
В основном, вопросы поддержки. Со временем функциональность расползается (как в базовом классе, если он конкретный, так и в производном), проект теряет четкость, существенные изменения становится трудно вносить... Как раз в этом смысле более безопасно наследование от стандартных классов (т.к. они не меняются). Но не кошерно. Лучше уж обертку сочинить. Но, ИМХО, иногда, если аккуратно и локально, то можно... Кстати, твоя аргументация (зачем тебе наследоваться от string, begin\end не нравятся) как-то неубедительна. Во-первых, у строки куча своих алгоритмов, во вторых, стандартные алгоритмы все через begin\end работают - чего разнобой вносить.... И т.д. -------------------- ... |
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
||||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Не достаточно. Просто есть необходимость кое-что добавить/заменить/изменить. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Не будет полиморфного удаления, так как базовый деструктор не виртуальный.
а сделать набор функций оберток над алгоритмами ? Имхо, плохо (но для общего случая.. чтоб сказать конкретно, надо видеть, чего Вы написали.) Это сообщение отредактировал(а) mes - 25.5.2009, 08:51 |
||||
|
|||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Почитайте Саттера - особенно главу - Ослабленная монолитность std::string. В нем и так до хрена функций а вы еще хотите добавить ![]() Классы СТЛ не писали в расчете не наследование. Открыто наследовать классы не предназначенные для этого - неправильно (мое лично мнение). Закрытое наследование - вполне приемлемо. Это сообщение отредактировал(а) azesmcar - 25.5.2009, 09:22 |
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
а заюзать, наконец, буст? в частности, "Boost String Algorithms Library";) andrew_121, или буст или напиши враппер, что будет делать то, что тебе нужно |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Или просто набор глобальных функций, которые будут принимать строку. Это лучше, чем наследовать класс.
-------------------- ... |
|||
|
||||
andrew_121 |
|
||||||||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Да, и в правду. Не подумал об этом. Тогда лучше boost::string_algo заюзать.
-------------------- Удалил аккаунт. Прощайте! |
||||||||
|
|||||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну и зачем Вам наследовать интерфейс класса std::string ? ради метода length () и нескольких тайпдефоф ?
не легче ли просто открыть к нему доступ, через метод ? (например так std::string& LString::std(); и для const). как минимум избавитесь от путаницы методов. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |