如何为Box<dyn Trait>字段指定关联类型的值?



我想为trait创建一个盒装结构字段,其中trait具有关联类型。下面是使用digest:: digest:

的示例
use digest::Digest;
struct Crypto {
digest: Box<dyn Digest>,
}

编译失败,报错:

关联类型OutputSize(来自性状digest::Digest)的值必须指定

有时我可能想使用sha2::Sha256和其他时间sha2::Sha512,每个都有不同的OutputSize。是否可以创建具有动态关联类型的盒装结构字段?如果有,是怎么做到的?

您可以创建自己的trait,并在返回Box<[u8]>Vec<u8>而不是GenericArray的所有Digest实例中给它一个全面的impl,但您不需要作为digest的作者已经为您创建了DynDigesttrait:

use digest::DynDigest;
struct Crypto {
digest: Box<dyn DynDigest>,
}

最新更新