我想为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
的作者已经为您创建了DynDigest
trait:
use digest::DynDigest;
struct Crypto {
digest: Box<dyn DynDigest>,
}