Что такое «отдельно скомпилированные шаблоны C ++»? - PullRequest
2 голосов
/ 02 октября 2011

Однажды я увидел утверждение, что «отдельно скомпилированные шаблоны C ++» являются стандартной функцией, которую не поддерживает ни один из доступных компиляторов C ++.

Что это за "отдельно скомпилированные шаблоны" и почему они игнорируются?

Ответы [ 2 ]

3 голосов
/ 02 октября 2011

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

Однако, только компиляторы, использующие интерфейс EDG, когда-либо поддерживали его, и не все из них даже официально. Фактически, единственный известный мне компилятор, который официально поддерживал его, был Comeau C ++ . Вот почему ключевое слово, к сожалению, было удалено из C ++ 11.

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

0 голосов
/ 02 октября 2011

В отдельно скомпилированных шаблонах вы можете вводить определения шаблонов из другой единицы перевода вместо того, чтобы определять их в каждом TU (обычно в заголовке).

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

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