2
我有一個通用結構,我想存儲一個閉包。這個閉包的參數和返回類型直接關係到結構的最終類型。我怎樣才能定義這樣的結構?泛型閉包如何存儲在泛型結構中?
我知道如何使用關鍵字where
複合類型的唯一方法。但是,當試圖編譯代碼時,編譯器會暫停並抱怨T
和't
未被使用。
我可以通過添加使用T
和't
的無用變量來編譯它,但我認爲有一個更好,更正確的爲什麼要這樣做。
以下代碼(playpen)編譯。刪除無用的變量,它不會:
pub struct GenericContainer<'t, T: 't, F> where F: Fn(&'t [T]) -> Option<&'t [T]> {
generic_closure: F,
unused: Option<&'t T>
}
impl<'t, T: 't, F> GenericContainer<'t, T, F> where
F: Fn(&'t [T]) -> Option<&'t [T]> {
pub fn new(gc: F) -> Self {
GenericContainer {
generic_closure: gc,
unused: None
}
}
pub fn execute(&self, slice: &'t [T]) -> Option<&'t [T]> {
let g = &self.generic_closure;
let _ = &self.unused;
g(slice)
}
}
fn main() {
let g = GenericContainer::new(|s| if s.len() == 0 {None} else {Some(&s[..1])});
assert!(g.execute(b" ") == Some(b" "));
println!("ok");
}
友好的音符誰可能有誤也徘徊在這條道路的人:確保你真的* *要使用閉包這種方式。通常,使用正常的struct + traits路徑將完成你想要做的事情,並且不會導致唯一類型的結構。 – urubi 2015-04-04 06:28:09