我有以下代碼:
pub struct Tree<T> {
root: Box<Node<T>>,
elements: HashSet<T>,
}
impl<T> Tree<T> {
pub fn new<I>(source: I) -> Option<Tree<T>>
where
I: std::iter::Iterator,
<I as Iterator>::Item: Hash,
<I as Iterator>::Item: Eq,
{
...
}
如何將<I as Iterator>::Item型別傳播到T?換句話說,我如何撰寫這樣的代碼:
let tree = Tree::new("test".chars());
uj5u.com熱心網友回復:
您可以使用Iterator<Item = T>. 所以你的代碼看起來像這樣
impl<T> Tree<T> {
pub fn new<I>(source: I) -> Option<Tree<T>>
where
I: Iterator<Item = T>,
T: Hash,
T: Eq,
{
...
}
}
如果您希望您的整個 Tree 能夠維護實作Hash和Eq特征的型別。您應該在實作中定義它。
impl<T> Tree<T>
where
T: Hash,
T: Eq,
{
pub fn new<I>(source: I) -> Option<Tree<T>>
where
I: Iterator<Item = T>,
{
None
}
}
這樣你就不必為每個方法定義它。
[編輯]
去除特質界的結構,因為這
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/311160.html
