Как мне добавить sh тип черты в Ve c? - PullRequest
1 голос
/ 23 марта 2020

Я пытаюсь собрать sh предметов в VecDeque, но я не могу разобраться с этим. Компилятор жалуется, что мой push_back метод в InnerQueue impl является обобщенным c T типом (ну, это так). Как я могу исправить код, чтобы я мог вывести sh UserItem s в User набранный Queue?

use std::collections::VecDeque;

fn main() {}

struct Queue<T: InnerQueue> {
    name: String,
    queue: T,
}

impl<T: InnerQueue> Queue<T> {
    pub fn new(name: String) -> Queue<T> {
        Queue {
            name,
            queue: T::new(),
        }
    }

    pub fn push<R>(&self, data: R)
    where
        R: QueueItem,
    {
        self.queue.push_back(data);
    }
}

trait QueueItem {}

type UserItem = (u32, u64, u64);

impl QueueItem for UserItem {}

trait InnerQueue {
    fn new() -> Self;
    fn push_back<T: QueueItem>(&mut self, data: T);
}

type User = VecDeque<UserItem>;

impl InnerQueue for User {
    fn new() -> Self {
        VecDeque::new()
    }

    fn push_back<T: QueueItem>(&mut self, data: T) {
        self.push_back(data);
    }
}

Детская площадка

error[E0308]: mismatched types
  --> src/main.rs:46:24
   |
45 |     fn push_back<T: QueueItem>(&mut self, data: T) {
   |                  - this type parameter
46 |         self.push_back(data);
   |                        ^^^^ expected tuple, found type parameter `T`
   |
   = note:       expected tuple `(u32, u64, u64)`
           found type parameter `T`
   = help: type parameters must be constrained to match other types
   = note: for more information, visit https://doc.rust-lang.org/book/ch10-02-traits.html#traits-as-parameters
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...