Я не понимаю определение функции ниже: Что означает (-1) в конце списка параметров?
template<typename RatioT = std::milli>
bool rclcpp::client::ClientBase::wait_for_service (std::chrono::duration< int64_t, RatioT > timeout = std::chrono::duration< int64_t, RatioT >(-1) )
Источник:
Из этого урока:
Спасибо за ответ, думаю, я его понял. default = std::chrono::duration<int64_t, std::mini>(-1)
. Меня это просто смутило (-1). Я до сих пор не понимаю, что может означать тайм-аут -1. Но это нормально
Похоже, wait_for_service перенаправляет вызов на wait_for_service_nanoсекунды. Вы можете взглянуть на источник, чтобы узнать точное поведение.
Это значение по умолчанию. Установите маловероятное значение, которого тайм-аут никогда не должен иметь. Лично я считаю, что такой API плох (магические числа). И должна была быть перегрузка функции, которая вообще не принимает таймаут, а перегрузка с таймаутом никогда не должна принимать отрицательные значения. (например, что делает такой API, когда вы передаете -2). Так что для меня это в основном плохой дизайн API.
Это означает, что значением параметра по умолчанию является -1
(любого типа длительности, по умолчанию миллисекунды). Это значение (или, возможно, любое отрицательное значение) предположительно используется для обозначения «отсутствия тайм-аута», однако в документации по этому классу ничего не говорится о значении любого из параметров любой из функций-членов.
просто для придирок: значение параметра функции по умолчанию — std::chrono::duration< int64_t, RatioT >(-1)
. -1 — это параметр конструктора для создания параметра по умолчанию.
@463035818_is_not_an_ai Я произношу std::chrono::milliseconds(-1)
как «-1 миллисекунда»
Таймаут по умолчанию равен -1. Не имеет отношения к вашему вопросу: «Вы читаете документацию для версии ROS 2, которая достигла своего EOL (окончания срока службы) и больше официально не поддерживается. Если вам нужна актуальная информация, пожалуйста, взгляните на Джаззи».