Здравствуйте, 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-ы можно сравнивать даже если они в разных единицах).