Ограничить использование шаблона обертыванием - PullRequest
0 голосов
/ 11 января 2020

Я пытаюсь добавить два числа с целочисленным переполнением в Rust. Тип номера должен быть настраиваемым, для этого я пытаюсь использовать шаблон. Затем я передаю операцию переполнения в структуру Wrapping . Это код:

// T: Copy + Add + Sub + Default + From<u8> + Into<char> + UpperHex
pub fn inc_value(&mut self, value: T) {
    self.buffer[self.index] = (Wrapping(self.buffer[self.index]) + Wrapping(value)).0;
}

К сожалению, это приводит к ошибке компиляции, потому что Wrapping (конечно) не всегда реализуется для T. К сожалению, Wrapping, похоже, не использует какие-либо черты, вместо этого она реализована наверняка значения.

Как я могу ограничить использование T в Wrapping? Или есть лучший способ заархивировать мою общую цель?

Это ошибка компилятора, которую я получаю:

error[E0369]: binary operation `+` cannot be applied to type `std::num::Wrapping<T>`
  --> src\buffer.rs:28:70
   |
28 |         self.buffer[self.index] = (Wrapping(self.buffer[self.index]) + Wrapping(value)).0;
   |                                    --------------------------------- ^ --------------- std::num::Wrapping<T>
   |                                    |
   |                                    std::num::Wrapping<T>
   |
   = note: an implementation of `std::ops::Add` might be missing for `std::num::Wrapping<T>`

1 Ответ

1 голос
/ 11 января 2020

Примечание в сообщениях об ошибках говорит вам, что делать; вам нужно добавить ограничение:

where
    Wrapping<T>: Add,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...