Как я сохраняю постоянное определение в заголовочном файле и не имею связанный в каждую библиотеку?

Вот сценарий. Мы используем Visual C++ 9. Существует библиотека C++, предназначенная, чтобы использоваться многими другими библиотеками. Его интерфейс находится в заголовке:

#pragma once

//CommonLibraryHeader.h
CSomeClass GetSomeClassFunction(); //is defined in some .cpp file
const CSomeClass MagicValue( 100, 200 ); //some predefined value that the previous function retuns to signify something important

теперь библиотека встроена в .dll файл. Заголовочный файл опубликован в общем месте и включен в несколько других библиотек. Те библиотеки встроены в свои .dll файлы.

Конечный результат следующий. Так как каждый .dll является отдельным исполняемым модулем, он должен сохранить все те константы. Каждая "константа" является на самом деле экземпляром класса с нетривиальным конструктором и деструктором. Теперь каждый .dll имеет копию MagicValue и код для конструкции и разрушения переменной введен в каждый .dll файл, который добавляет ко времени загрузки и значительно расширяет .dll файлы, если то же происходит для многих констант.

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

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

1
задан sharptooth 29 July 2010 в 10:10
поделиться

1 ответ

Вы можете использовать уловку, которая часто используется с DLL, экспортирующими классы и функции: используйте #define, который определяется только тогда, когда библиотека DLL, в которую вы хотите включить код, построена, но не определена в других, и выполнять #if , который либо вызывает конструктор, либо определяет его как extern, в зависимости от ситуации.

2
ответ дан 2 September 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: