Общая функция для получения struct в качестве параметра в rust - PullRequest
0 голосов
/ 01 сентября 2018
struct Item1 {
    a: u32
}

struct Item2 {
    a: u32,
    b: u32,
}

fn some_helper_function(item: Item1) {
    // Basically `item` could be of type `Item1` or `Item2`.
    // How I create generic function to take any one of them?
    // Some implementation goes here.
}

Как создать универсальную функцию some_helper_function, параметр которой может иметь несколько производных типов данных, таких как Item2 или Item1.

1 Ответ

0 голосов
/ 01 сентября 2018

В вашем примере нет никакой связи между Item1 и Item2. И дженерики Rusts не типизированы по типу утки, как шаблоны C ++ или функции Python.

Если вы хотите, чтобы функция работала с несколькими типами, обычно нужно сделать ее универсальной и иметь некоторую черту, определяющую, что общего у этих типов:

trait HasA {
    fn get_a(&self) -> u8;
}

impl HasA for Item1 {
    fn get_a(&self) -> u8 {
        self.a
    }
}

impl HasA for Item2 {
    fn get_a(&self) -> u8 {
        self.a
    }
}

fn some_helper_function<T: HasA>(item: T) {
    println!("The value of `item.a` is {}", item.get_a());
}

Было предложение , чтобы иметь поля для черт, которые позволили бы вам использовать item.a из универсального (вам все равно придется реализовать черту для каждого типа). Но это было отложено. Похоже, что это предложение принесло слишком мало пользы и некоторые вопросы остались нерешенными и что оно не рассматривалось в качестве приоритета.

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