Используя хронограф, как следует хранить время как переменную? - PullRequest
2 голосов
/ 11 октября 2019

Я использую Chrono для стандартизации использования меток времени в приложении.

Учитывая метку времени, я бы создал точку времени. Затем я бы преобразовал его в time_t, чтобы передать его в качестве параметра.

std::chrono::system_clock::to_time_t (timePoint)

Должен ли я вместо этого передавать точку времени? Что кажется наилучшей практикой?

void func(time_t time)

или

void func(std::chrono::time_point timePoint)

1 Ответ

2 голосов
/ 11 октября 2019

Мой совет таков: если вам не нужно переходить на C API (например, time_t) для совместимости с другим кодом, который его использует, просто оставайтесь в <chrono> (например, std::chrono::system_clock::time_point). Он имеет лучшую точность и является уникальным типом с семантикой «точка времени» вместо просто целочисленного типа.

То есть мой голос:

void func(std::chrono::system_clock::time_point timePoint);

C ++ 20принесет много возможностей, облегчающих работу с типами <chrono>, и эти средства созданы на основе прототипа в бесплатной библиотеке с открытым исходным кодом:

https://github.com/HowardHinnant/date

Примечание. Я немного изменил ваше предложение,std::chrono::time_point - это шаблон класса, а не тип:

template<class Clock, class Duration = typename Clock::duration>
    class time_point;

Я выбрал system_clock, поскольку это часы, аналогичные типу C time_t. Он отсчитывает время с 1970-01-01 00:00:00 UTC, за исключением более высокой точности, чем обычно time_t.

И system_clock::time_point - псевдоним типа для time_point<system_clock> (вы могли быиспользуйте либо).

Видеоруководство по <chrono> см. https://www.youtube.com/watch?v=P32hvk8b13M

...