[英]Can a non-generic struct implement a generic function in rust?
非泛型結構能否在 rust 中實現泛型函數,其工作原理如下:
struct S;
impl <T> S {
fn do_something(value : T) {
//do something
}
}
fn main() {
let a = /*a value*/;
S::do_something(a);
}
如果不是,假設 S 實現了一個通用特征 Tt:
struct S;
impl <T> Tt<T> for S {
fn a_func(value : T) {
//do something
}
}
impl <T> S {
fn do_something(value : T) {
//do something
}
}
fn main() {
let a = /*a value*/;
S::do_something(a);
}
有什么辦法可以讓它工作嗎?
如果在類型本身中使用它,則只能為impl
塊聲明類型變量。
但是,您也可以在單個方法上引入新的類型變量:
impl S {
fn do_something<T>(value: T) {
//do something
}
}
這對於作為閉包的參數尤其常見,因為每個閉包都有不同的類型,因此這對於您能夠每次使用不同的閉包調用方法是必要的。 例如, Iterator::map
定義如下:
fn map<B, F>(self, f: F) -> Map<Self, F>
where
F: FnMut(Self::Item) -> B,
如果F
是為類型而不是方法聲明的,那么每次調用map
時都必須使用相同的閉包 - 不是很有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.