Увеличить только заголовок хронографа по сравнению со связанным

Повысить документацию Chrono говорит, что можно использовать библиотеку chrono в качестве библиотеки только заголовка. Я не вижу ничего, что упоминало бы ограничения на использование его в качестве библиотеки только заголовка. Помимо очевидной разницы в том, что нет необходимости ссылаться на boost_chrono, что меняется, когда я определяю макрос BOOST_CHRONO_HEADER_ONLY?

Мне интересно использовать библиотеку для функций chrono_io. Я предпочел бы использовать версию только для заголовка, но хочу знать, что я теряю при этом. Если нет никакой разницы, почему существует связанная версия?

#define BOOST_CHRONO_VERSION 2

#include <boost/chrono.hpp>
#include <boost/chrono/chrono_io.hpp>

int main(int argc, char **argv)
{
const auto now = boost::chrono::system_clock::now();

std::cout << "It is now "<< boost::chrono::time_fmt(boost::chrono::timezone::local)
<< now << "\n";

}

Составлено с

g++ -std=c++11 -o chronoLinked main.cpp -lboost_system -lboost_chrono
g++ -std=c++11 -o chrono main.cpp -lboost_system -D BOOST_CHRONO_HEADER_ONLY

Запуск обоих выдает одинаковый вывод с текущим временем.

1

Решение

Если нет задокументированной разницы, вы можете быть уверены, что ее нет.

Техническое различие, конечно, заключается в том, что двоичный файл будет больше (содержит все необходимые определения, которые в противном случае были бы в общей библиотеке).

Для других библиотек (например, Boost System) выбор варианта только для заголовка будут программы воздействия, например, ссылка на другие библиотеки, которые также использовали Boost System. Разница будет в дублировании глобалов, когда они будут использоваться совместно в сценарии динамического связывания. Ярким примером этого могут быть категории ошибок.

Если вы хотите быть бдительными, ищите (статические) глобальные данные, которые нужно было бы распространять, а не дублировать. Я не сразу знаю о таких данных в Boost Chrono.

1

Другие решения

Других решений пока нет …