Re: std::chrono::duration_values::zero
От: Chorkov Россия  
Дата: 24.01.19 11:10
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Что-то я не понимаю как этим пользоваться.


BFE>С удивлением обнаружил, что есть два* нуля:

BFE>std::chrono::duration_values<..>::zero()
BFE>и
BFE>std::chrono::duration<..>::zero()
BFE>но я не совсем понимаю как этим пользоваться.

BFE>У меня есть метод класса: auto GetTimeout();

BFE>Я хочу узнать, не вернула ли эта функция ноль.

BFE>Простой вариант:

BFE>
BFE>  if ( 0 == GetTimeout().count() )
BFE>

BFE>конечно работает, но хотелось бы "по науке", т.е. использовать функцию zero().

Лучшее враг хорошего.
Первый вариант всем прекрасно понятен. Даже тем кто впервые видит chrono.

BFE>Я могу написать:

BFE>
BFE>  if ( GetTimeout().zero() == GetTimeout().count() )
BFE>

BFE>но это два вызова функции GetTimeout() и мало кто сможет это прочесть не дивясь мудратости автора.
BFE>Можно, конечно, написать так:
BFE>
BFE>if ( std::result_of<decltype(&ClassName::GetTimeout)(ClassName)>::type::zero() == GetListenTimeout() )
BFE>

BFE>если пишешь для врагов.


Зчачем result_of?
if ( decltype(GetListenTimeout())::zero() == GetListenTimeout() )

или
if ( std::chrono::seconds::zero() == GetListenTimeout() )

или
if ( std::chrono::seconds(0) == GetListenTimeout() )

или
if ( GetListenTimeout() == 0s )

(duration-ы можно сравнивать даже если они в разных единицах).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.