Информация об изменениях

Сообщение Re: Наследоваться или инкапсулировать? от 16.09.2022 11:43

Изменено 16.09.2022 16:50 ksandro

Re: Наследоваться или инкапсулировать?
Здравствуйте, Marty, Вы писали:

M>Здравствуйте!


M>Хочу вот сделать свой класс строк, который предоставляет всё то, что даёт std::basic_string. Вот буквально пару методов добавить, при том, что всё новое будет работать через методы std::basic_string'а.


M>Отнаследоваться от std::basic_string'а, или сделать его членом класса, и написать/скопировать простыню делегирования?


M>В чем подводные камни?


Вообще конечно было бы неплохо ухнать, что это за пара методов. Но как по мне так однозначно надо делать пару свободных функций. Можешь засунуть их в какой-нибудь "namespace my_string_utils".

Почему не стоит делать свой класс строки. Просто потому что мы все это лет 15 назад проходили. Когда-то каждый программист считал, что он просто обязан написать свою лучшую в мире реализацию строки. Мало того тогда еще все бибилиотеки и фреймворки имели свою реализацию строки. Помните AnsiString, CString, QString и др. Всех их вообще было довольно просто преобразовать друг в друга, но все равно приходилось очень много трахаться чтобы интегрировать разные части кода.
Потом вроде наконец то все стали использовать стандартный std::string или const char* (сейчас правда еще string_view появился, зоопарк растет), и все более менее довольны. Но многим по прежнему хочится написать свою новую молодежную реализацию класса строки. Главный подводный камень, что никому твой класс строки будет не нужен, и если кто-то будет юзать твой код, первое что он сделает, это попытается преобразовать твою строку во что-то стандартное, с чем он знает как работать. Даже если твоя строка будет всего лишь оберткой над стандартной, тебе все равно придется передавать ее в свои функции, чтоб использовасть новый функционал, то есть ты полностью привяжешь свой код к новой строке, либо ты весь код должен сделать шаблоном, что то еще удовольствие.

Мой тебе совет, не знанимайся фигней, сделай просто пару свободных функций, иначе потом будешь очень долго мучиться.
Re: Наследоваться или инкапсулировать?
Здравствуйте, Marty, Вы писали:

M>Здравствуйте!


M>Хочу вот сделать свой класс строк, который предоставляет всё то, что даёт std::basic_string. Вот буквально пару методов добавить, при том, что всё новое будет работать через методы std::basic_string'а.


M>Отнаследоваться от std::basic_string'а, или сделать его членом класса, и написать/скопировать простыню делегирования?


M>В чем подводные камни?


Вообще конечно было бы неплохо узнать, что это за пара методов. Но как по мне, так однозначно надо делать пару свободных функций. Можешь засунуть их в какой-нибудь "namespace my_string_utils".

Почему не стоит делать свой класс строки. Просто потому что мы всё это лет 15 назад проходили. Когда-то каждый программист считал, что он просто обязан написать свою лучшую в мире реализацию строки. Мало того тогда еще все бибилиотеки и фреймворки имели свою реализацию строки. Помните AnsiString, CString, QString и др. Всех их вообще было довольно просто преобразовать друг в друга, но все равно приходилось очень много трахаться чтобы интегрировать разные части кода.
Потом вроде наконец то все стали использовать стандартный std::string или const char* (сейчас правда еще string_view появился, зоопарк растет), и все более менее довольны. Но многим по прежнему хочится написать свою новую молодежную реализацию класса строки. Главный подводный камень, что никому твой класс строки будет не нужен, и если кто-то будет юзать твой код, первое что он сделает, это попытается преобразовать твою строку во что-то стандартное, с чем он знает как работать. Даже если твоя строка будет всего лишь оберткой над стандартной, тебе все равно придется передавать ее в свои функции, чтоб использовасть новый функционал, то есть ты полностью привяжешь свой код к новой строке, либо ты весь код должен сделать шаблоном, что то еще удовольствие.

Мой тебе совет, не знанимайся фигней, сделай просто пару свободных функций, иначе потом будешь очень долго мучиться.