I (fonksiyonları ve bazı parametre kabartmak kaldırdıktan sonra) gibi bakmak bazı özellikleri var: sonra bir muktedirUygulama İçiçe Özellikleri
trait Foo { }
trait Boo { }
trait Bar<T: Foo> { }
trait Baz { }
U
Eğer Foo
veU
Boo
uygular uygulayan bazı T
için Bar<T>
uygular olduğu için Baz
'un bir uygulamasını türetmek için. Ancak, bunu yaparken geçerli bir Rust kodu yazamadım.
birkaç denemeden edildi:
impl<T: Foo, U: Bar<T> + Boo> Baz for U { }
impl<U: Bar<T> + Boo> Baz for U { }
verir
ise verirerror: the type parameter
T
is not constrained by the impl trait, self type, or predicates [E0207]
error: type name
T
is undefined or not in scope [E0412]
Biri/nasıl biri (sabit) Rust'ta (herhangi bir dinamik gönderim olmadan umarım) bunu yapabilir?
Düzenleme: Bazı insanlar bazı benzer soruların ima kendisi için esasen iki yaklaşım vardı (ve benim durum için her ikisi de uygun bulmayacağı):
- ilişkili türlerini kullanma. Bunu yapmak istemiyorum çünkü
T
, örn.U
veV
'unT
içinfn bla<T: Foo, U: Bar<T>, V: Bar<T>>()
gibi bir imzası olan bazı işlevleri yazmak istiyorum. (Ya da ilişkili türleri ile bunu yapmanın bir yolu var mı?) - Bir yapıda
U
veT
'u koyarak bir çeşit sargı kullanarak. Bunu kullanmak istemiyorum, çünkü bu tür "özellik bağımlılıkları" gibi bir çok seviyem var, bu yüzden her seviyede bir şeyler sarmak kodu çok şişirirdi.
Güncelleştirilmiş soru şu şekilde olurdu: İlişkilendirilen türleri veya sarmalayıcıları kullanmadan bu soruna bir çözüm var mı?