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