предварительно скомпилированные заголовки C ++ - PullRequest
0 голосов
/ 27 июня 2011

1001 * предположить *

У нас есть проектная (статическая) библиотека c ++ 'A', которая использует заголовки DirectX в качестве предварительно скомпилированных заголовков для реализации базового графического движка.

и у нас есть проектная (статическая) библиотека 'B', которая использует заголовки 'A' в качестве предварительно скомпилированных заголовков для реализации игрового движка

и у нас есть проект C ++ 'C', который использует два предыдущих проекта для реализации игры

Теперь мой вопрос:

Есть ли способ для проекта «C» просто включить проект «B» и не включать (заголовки DirectX и «A»)?

или с другой стороны

есть ли способ встраивать (DirectX и проект 'A') в проект 'B'?

танки

Ответы [ 3 ]

2 голосов
/ 27 июня 2011

Просто убедитесь, что у проекта B есть несколько чистых заголовков интерфейса, которые раскрывают функциональность игрового движка, который можно использовать из модулей C, без каких-либо подробностей о том, как они реализованы.Это могут быть абстрактные классы или следовать соглашению интерфейсов.И они должны быть всем, что требуется для включения C. Все материалы DirectX могут быть расположены в личных файлах, которые не предназначены для внешнего использования.

1 голос
/ 27 июня 2011

Предварительно скомпилированные заголовки должны НИКОГДА не показываться пользователям библиотеки.Они являются деталью реализации библиотеки;ничего более.PCH - это то, что включает в себя файлы .cpp;они никогда не должны включаться в заголовочный файл.

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

Давайте рассмотрим ваш пример.Проект A использует DirectX.Поэтому файлы .cpp в проекте A содержат PCH, который включает заголовки DirectX.Теперь, если интерфейс для Project A использует объекты и типы DirectX, тогда заголовки интерфейса Project A (те, которые используются пользователями Project A) должны будут включать заголовки DirectX.

Это не повлияет на способность проекта A использовать PCH для улучшения времени компиляции.Заголовки DirectX имеют элементы защиты, поэтому они не будут включены несколько раз.Не стоит ничего включать в заголовки интерфейса проекта А.

Проект Б, который использует проект А, будет иметь свои собственные файлы PCH.Этот PCH будет включать в себя заголовки DirectX и Project A.Таким образом, включение DirectX в заголовки проекта A не повлияет на время сборки проекта B.

В проекте B используется проект A. Но, как вы уже описали, проект B не раскрывает пользователей проекта Bв проект A или DirectX.То есть тот факт, что Проект B использует Проект A, является деталью реализации Проекта B, и поэтому он не должен быть представлен пользователям Проекта B.

Как таковые, заголовки интерфейса Проекта B (заголовки, используемыепользователи проекта B) не включают ничего из проекта A или из DirectX.Поэтому этот Проект C, который использует Проект B, не будет включать их.

0 голосов
/ 27 июня 2011

Поскольку проект B включает / связывает с проектом A, нет необходимости включать «A» в проект «C».Проект B будет содержать все, что есть в проекте A, а проект C, следовательно, будет содержать все A и B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...