Почему Eigen не нужно связывать .lib или dll?

Недавно я скомпилировал Eigen3 и использовал его для решения задачи линейной алгебры в Windows.

Но мне интересно, почему Eigen3 не нужно связывать дополнительную библиотеку или DLL (мне просто нужно включить ее заголовок)

Выполняет ли Eigen все вычисления во время компиляции? Или я чего-то не понимаю?

Если да, то как называется категория этой библиотеки?


person tirth    schedule 04.12.2012    source источник


Ответы (1)


Как и все библиотеки шаблонов C++, Eigen полностью содержится в заголовочном файле и каждый раз вставляется в исходный файл. Таким образом, он не содержит никаких файлов cpp, которые были бы скомпилированы в dll.

Различие между dll/lib и заголовком возникает, когда классы объявляются в заголовке и реализуются в файле cpp. Тогда часть реализации всегда одна и та же и может быть загружена из dll.

Однако в библиотеке шаблонов классы не закончены, поскольку они зависят от параметров шаблона, которые вы им передаете. например если вы пишете Matrix<float, 17, 19>, вы создаете новый полный класс с совершенно новой реализацией, которую нельзя загрузить из dll.

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

person BeniBela    schedule 04.12.2012
comment
Спасибо БениБела. У меня есть еще один вопрос. Есть ли у этой библиотеки типов какой-то общий недостаток? например увеличить размер моей программы? - person tirth; 04.12.2012