簡體   English   中英

非泛型結構可以在 rust 中實現泛型函數嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM