Как указать временное время жизни при определении границ черты? - PullRequest
2 голосов
/ 19 марта 2020

Я хотел бы объявить структуру, которая обертывает универсальный c тип T, например:

use std::ops::Add;
struct MyStruct<T> where T: Add<&T, Output=T> {
    t: T
}

Это не с:

error[E0637]: `&` without an explicit lifetime name cannot be used here
 --> src/lib.rs:3:33
  |
3 | struct MyStruct<T> where T: Add<&T, Output=T> {
  |                                 ^ explicit lifetime name needed here

error[E0310]: the parameter type `T` may not live long enough

Как я могу сказать компилятор, который &T может быть временной переменной, и поэтому с любым временем жизни все в порядке?

Я не хочу менять свою сигнатуру структуры на MyStruct<'a, T>, поскольку это делает использование более многословным и сложным.

1 Ответ

2 голосов
/ 19 марта 2020
use std::ops::Add;
struct MyStruct<T> where T: for <'a> Add<&'a T, Output=T> {
    t: T
}

Детская площадка: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=864f6c2ad80544adfa7da96cef8eb69c

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