Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Имеет ли смысл делать классы-обертки?


Автор: LeonidPr 25.6.2019, 11:45
Всем привет, задумался над таким вопросом: во многих проектах разработчики делают обертки над различными 
низкоуровневыми понятиями для обеспечения кросплатформенности и универсальности.
Т.е. в проекте есть что-то вроде MyMutexImplMySemaphoreImpl, MyThreadImpl и т.п.
При этом может подтягиваться соответствующая имплементация в зависимости от платформы, на которой идет сборка (Pimpl в помощь)
Так вот в последних стандартах C++ многие вещи подтянули в стандартную библиотеку (<atomic><mutex><thread>) и т.д.
Возник вопрос - стоит ли делать в новых проектах обертки над такого рода STL классами?
С одной стороны вижу смысл в этом в целях обеспечения универсальности, т.к. не все есть в STL, что-то будет браться из других библиотек, или вообще писаться непосредственно через API платформы.
И дабы в дальнейшем не думать какой примитив использовать - свой или из STL стоит сделать низкоуровневый слой с универсальным интерфейсом и стандартизированными (в рамках проекта) названиями для классов.
С другой стороны - есть же здравый предел, не делать же обертки для STL контейнеров или других стандартных типов.
Интересно послушать мнение других по этому вопросу.

Автор: LeonidPr 25.6.2019, 13:45
Модераторы, удалите плиз одну тему.
У меня вылезла ошибка при создании Bad gateway. когда обновил страницу оказалось, что тема уже создалась, а я послав еще раз создал копию.
P.S. Кстати часто появляется именно на Vingrad-е. Замечаю, не я один копии штампую.

Автор: xvr 25.6.2019, 13:47
Цитата(LeonidPr @  25.6.2019,  11:45 Найти цитируемый пост)
Возник вопрос - стоит ли делать в новых проектах обертки над такого рода STL классами?

Нет

Цитата(LeonidPr @  25.6.2019,  11:45 Найти цитируемый пост)
С одной стороны вижу смысл в этом в целях обеспечения универсальности, т.к. не все есть в STL, что-то будет браться из других библиотек, или вообще писаться непосредственно через API платформы.

STL де факто (и уже де юро) является частью компилятора (точнее среду, в которую входит компилятор и его run time библиотеки). Вы же не пишете свои обвертки над стандартными библиотеками компилятора (да и над примитивами самого компилятора)? Почему STL должна быть исключением?

Единственный случай, когда это оправдано, если ваша программа должна собираться для разных стандартов C++ (и как следствие STL), тогда конструкции, отсуствующие в младших версиях, можно обвернуть в свои прослойки (но лучше не поддерживать разные версии С++ вообще)

Автор: LeonidPr 25.6.2019, 14:18
Цитата(xvr @  25.6.2019,  13:47 Найти цитируемый пост)
Почему STL должна быть исключением?

Вот и задумался должна или нет.
Почему задумался - потому, что не все же есть в STL.
Имеется в виду, что часть задач решается с помощью STL, часть с помощью других либ, или самописных средств.
Для примера в STL есть мьютекс, но нет семафора, ага он есть в boost, плюс там есть еще куча всего.
Т.е. задачи одного класса (синхронизация в данном случае) решается по-разному. у STL свой интерфейс, у boost свой.
тут и возникает желание создать систему классов для синхронизации, стандартную в рамках своего проекта.

Цитата(xvr @  25.6.2019,  13:47 Найти цитируемый пост)
Вы же не пишете свои обвертки над стандартными библиотеками компилятора

Ну как я и говорил, должен быть здравый предел

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)