Мне нужно замаскировать некоторые начальные биты значения. Если значение не имеет знака, я могу утверждать (гарантировать), что какое-то произвольное число старших битов не установлено, то есть это значение гарантированно будет ограничено.
Если он подписан, мне нужно замаскировать начальные биты (превращая значение в некоторую непереносимую кучу битов, да, я знаю об этом :-)). Я хотел бы сохранить операцию маскирования, если значение не подписано.
Так что у меня в основном есть
template<typename T, some more template parameters>
class {
unsigned transform(T value) {
...
if (isSigned(T)) {
value &= mask;
}
...
}
}
Есть ли простой способ написать isSigned (), который можно оценить во время компиляции (чтобы оптимизатор мог удалить неподписанный мертвый код)?
Конечно, я мог бы добавить еще один параметр шаблона ...