Когда я хочу преобразовать различные целочисленные типы, кажется, что лучший синтаксис - использовать boost::numeric_cast<>()
:
int y = 99999;
short x = boost::numeric_cast<short>(y); // will throw an exception if y is too large
Я никогда не использовал это; однако синтаксис довольно прост, так что все хорошо.
Теперь предположим, что я хочу сделать что-то более продвинутое: вместо того, чтобы генерировать исключение, я бы хотел, чтобы он возвращал минимум или максимум целевого типа (насыщенность). Я не мог найти способ выразить это, но документация предполагает, что это возможно (возможно, с использованием политики RawConverter
). Все, что я мог придумать, это следующее уродливое:
short x = numeric_cast<short>(max(min(y, SHORT_MAX), SHORT_MIN);
Так, как я могу выразить "насыщающий бросок", используя буст numeric_cast
?