Стандарт C ++ по экспорту шаблонов, кто-нибудь может это объяснить? - PullRequest
4 голосов
/ 27 июля 2010

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

Что на самом деле означает приведенное выше утверждение?

Пожалуйста, укажите один expalin с программой?

Ответы [ 2 ]

3 голосов
/ 27 июля 2010

Этот сложный абзац означает, что если вы объявляете шаблонный класс как экспортированный до его определения, а затем в том же модуле перевода (фактически, файл после предварительной обработки) вы фактически определяете класс, определение класса экспортируется.Но если вы определили класс и , то у есть прототип с ключевым словом "export", это не так.

Там английский, верно?

2 голосов
/ 27 июля 2010

Ключевое слово export предназначено для того, чтобы шаблоны были объявлены в заголовочных файлах, но определены в файлах реализации - как это обычно делается с любой другой функцией.

К сожалению, производители компиляторов более или менее игнорировали ключевое слово export за последнее десятилетие. Сопровождающие GCC и Microsoft скажут вам, что для этой функции не хватает «спроса» (как это ни удивительно - почти никто не поддерживает ее, поэтому никто не знает об этом, как удачно доказывает ваш вопрос). Они также скажут вам, что это слишком сложно реализовать эффективно.

(Справочная информация: Это то, что люди EDG говорили на заседаниях комитета C ++, но другие настаивали на добавлении его в стандарт. В конце концов, люди EDG были первыми и, к сожалению, единственными, кто по сей день, кто насколько я знаю, реализовал эту функцию в своем интерфейсе компилятора.)

Таким образом, для всех практических целей вы можете игнорировать приведенное выше утверждение. Шаблоны должны быть определены в заголовочных файлах и вообще не могут быть «объявлены», поскольку все внешние интерфейсы компилятора, за исключением EDG, не соответствуют стандарту в этом отношении.

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