|
|
|
С++ идиомы - обсуждение01.08.2016, 11:59. Показов 3345. Ответов 25
Метки нет (Все метки)
Тема создана для вопросов и обсуждений С++ идиом
0
|
|
| 01.08.2016, 11:59 | |
|
Ответы с готовыми решениями:
25
С++ идиомы
|
|
Неэпический
|
||
| 12.10.2018, 15:15 | ||
library.h не включает impl.h,тем не менее он всё равно зависит от impl.h, и изменение последнего (в плане размера класса impl) приведет не только к перекомпиляции того, что зависит от impl.h, но и всего, зависящего от library.h, конечно, если не забудем руками размер буфера поменять. В pImpl же изменения в impl.h никак не отражаются на library.h,не требуют его изменения и перекомпиляции зависимых от library.h "модулей".Именно об этом говорит GbaLog-.
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 12.10.2018, 16:11 | |||
|
что приводит к его перекомпиляции. избежать необходимости перекомпиляции application.exe (dll, или чего мы там собираем) не позволяет. но этого и не требуется. задача пимплов/римплов - отделить интерфейс от реализации. что бы один и тот же хедер file_watcher.h юзать и под линуксами, и под виндовсами. где в зависимости от, будет подсунута та, или иная реализация. тот факт, что по мере развития кросс-платформенного продукта что то может меняться, и нужно будет собирать более новые версии - не парит никого вообще. большинство людей не то что бы не знают, даже не задумываются, какие изменения произошли в более старших версиях boost, или qt. я помню, как то раз на бою сделал такую вещь. мне нужна была функциональность boost::filesystem, но сам буст в проект тащить было запрещено. я римплом обернул fs::path.далее руками cmake линкером разобрал lib на obj. и заново их слинковал в одну большую fs.lib все. похоронил зависимость от буста. теперь буст за собой таскать уже не нужно. собственно, для таких проделок и был придуман pimpl/rimpl. только вот нафига использовать более тормозной вариант с pimpl, который при каждом создании path будет лишний раз дергать кучу, если можно сделать более эффективный и безопасный rimpl? кучу нужно дергать только либо для долгоживущих объектов, либо если заранее нельзя предугадать какой потребуется буфер. во всех остальных случаях дёргать кучу - не эффективный дилетантский код.
0
|
|||
|
Неэпический
|
|
| 12.10.2018, 16:29 | |
|
hoggy, ну так о компиляции
library.cpp никто и не спорит.Вопрос то стоит в компиляции зависимых от library.h "модулей".Если наша библиотека - это DLL, то в случае rImpl, перекомпилировать придется все приложения, которые её используют, ведь у нас теперь sizeof(agregate) поменялся.В случае же pImpl, достаточно пересобрать только нашу DLL. Вот здесь вылезает плюс неизменности ABI при использовании pImpl.
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||||||
| 12.10.2018, 16:38 | ||||||||||||
|
пересборка DLL не требует пересборку чего либо ещё (других dll, или executable) в противном случае, такая DLL - неюзабельное говно с неиллюзорной опасностью нарваться на дырявое ABI а теперь задайте себе вопрос: почему грамотно выполненные DLL ну прямо таки обожают сишку? почему грамотное апи выглядит так:
если у вас в хедере dll торчит зависимость от с++ специфики, значит у вас есть проблема посущественнее, чем пересборка всех бинарей, что от неё торчат.
0
|
||||||||||||
|
Неэпический
|
|
| 12.10.2018, 16:47 | |
|
hoggy, причем здесь вообще C?
Вопрос не о C и даже не о DLL, это пример. Удачный или нет - не так важно в данном случае. Вопрос в том, что при использовании rImpl, изменение реализаци "скрытого класса" приводит изменению "не скрытого класса" и перекомпиляции зависимых от оного частей. То есть, фактически, при изменении класса-реализации, изменяется и класс-интерфейс, т.е. вроде бы они и отдельно, но ни фига не независимо. В случае с pImpl такого не происходит.
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||||||
| 12.10.2018, 17:15 | ||||||||||||
|
ребилд сам по себе все равно никого не парит. 2. вы можете использовать разнообразные стратегии для rimpl. например, сделать буфер побольше с запасом. 3. rimpl прекрасно сочетается с impl. например, я когда то такую штуку делал:
вот я открываю например хэдер метаковского api. там вижу вещи наподобие: MT4ServerAPI.h
reserved ?вот с той самой, что ежели нужно какое поле добавить, что бы ODR как карточный домик не рассыпалось. что бы обеспечивать обратную совместимость новых версий dll с уже написанным старым кодом пользователей. в реальных условиях с чем то подобным приходится жить на сопровождении.
0
|
||||||||||||
| 12.10.2018, 17:15 | |
|
Обсуждение THL W8 Обсуждение литературы Обсуждение лицензий Обсуждение FAQ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства.
Жизнь действительно предъявляет каждому. . .
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
|
|
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины".
За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html
Задача: . . .
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|