В чем причина включения всего кода C ++ STL в файлы .h, а не в .cpp / .c? - PullRequest
4 голосов
/ 14 ноября 2009

Я только что скачал исходный код STL и заметил, что все определения для шаблонных классов STL включены в файл .h. Фактический исходный код для определения функции находится в файле .h, а не в файле .cpp / .c. В чем причина этого?

http://www.sgi.com/tech/stl/download.html

Ответы [ 2 ]

16 голосов
/ 14 ноября 2009

Потому что очень немногие компиляторы реализуют связывание шаблонов. Это сложно.

Вот краткая, но (я думаю) информативная статья об этом: http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=53

Я говорю «я думаю», потому что на самом деле это не то, с чем я очень хорошо знаком, кроме того, что оно широко не реализовано. Сначала я сказал, что стандарт не требует этого, но, глядя на определение «экспорта» в C ++ 03, я не вижу никаких признаков того, что это необязательно. Может быть, это просто провальный стандарт.

1 голос
/ 14 ноября 2009

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

Это допускает некоторые вставки и объясняет, почему иногда использование шаблонных вещей (например, std :: sort) работает быстрее, чем в простом C.

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