Являются ли заголовки перед компиляцией хорошим способом скрыть код?

Я работаю над проектом, в котором желательно скрыть содержимое заголовочных файлов. Недавно я пришел к идее предварительно скомпилированных заголовков. Насколько применимы эти вещи?

Заголовки обычно должны быть предварительно скомпилированы в той же системе, где происходит фактическая компиляция. Вам все еще нужно иметь доступ к заголовку. Какова цель «скрытия» заголовочного файла?

user17732522 16.04.2023 20:52

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

F35H 16.04.2023 20:54

Цель файлов заголовков — описать интерфейс, который должен использовать пользователь. Зачем тебе это скрывать? Это именно та часть вашей программы, которая вам нужна для связи с пользователем фреймворка. Все, что не является частью интерфейса, можно вынести в отдельный исходный файл и раздавать только в скомпилированном виде.

user17732522 16.04.2023 20:55

Интерфейс, который они используют, не скрыт. Что скрыто, так это часть фреймворка, которая используется внутри

F35H 16.04.2023 20:57

Похоже, вам нужно два файла заголовков, один для интерфейса и один для внутренних вещей. Не выдавайте внутреннюю.

Mark Ransom 16.04.2023 20:59

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

StoryTeller - Unslander Monica 16.04.2023 21:05

прыщ может быть лучшим подходом для достижения вашей цели. Я считаю, что предварительно скомпилированные заголовки не годятся для этой цели. Это, вероятно, помешает вашим клиентам использовать предварительно скомпилированные заголовки для собственного использования, будет хрупким, и вам придется поддерживать, сколько платформ с каким количеством компиляторов с сколькими различными настройками параметров компилятора? Если бы я увидел это в библиотеке/фреймворке, я бы просто сказал нет.

Avi Berger 16.04.2023 21:09

Это достаточно справедливо @AviBerger. До сих пор я использовал pimpl для всего проекта. Кажется, это самый оптимальный подход.

F35H 16.04.2023 21:14

Если вы беспокоитесь о производительности, но знаете размеры своих реализаций, вы можете использовать класс pimpl, чтобы избежать динамических аллокаций.

Mooing Duck 16.04.2023 21:41
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
9
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для тех, кто в будущем, предварительно скомпилированный заголовок не является ответом просто потому, что его вывод не зависит от платформы. Использование идиомы pimpl [или подобных понятий] должно быть очень предпочтительным.

Обратите внимание, что ваш вопрос и ответ относятся к конкретному использованию. Например, некоторые библиотеки C++ предназначены только для заголовков. Компиляция проекта, зависящего от таких библиотек, может стать заметно быстрее с использованием предварительно скомпилированных заголовков.

Öö Tiib 16.04.2023 22:52

Другие вопросы по теме