Я не вижу, в чем здесь проблема ... моя реакция такова: так что не устанавливайте ChannelR на uint8, если это сломается "
Вы, кажется, делаете эквивалент, утверждая, чтокод типа
uint8 a=128;
uint8 b=128;
uint8 c=a+b; // Uh-Oh...
должен делать что-то умное (например, насыщающая арифметика).
Я бы предложил решение использовать более высокую точность или определить свой собственный channel_saturating_plus_t
с поведением, которое вытребуют, как бы я ни предлагал, решение вышеописанного -
uint16 c=uint16(a)+uint16(b)
или
uint8 c=saturating_add(a,b);
И будьте благодарны, что создатели GIL даже подумали представить тип результата какпараметр отдельного типа;есть много людей, которых бы не было!