问题描述
我想为一个特征创建一个装箱结构字段,其中特征具有关联的类型。下面是一个使用 digest::Digest 的示例:
use digest::Digest;
struct Crypto {
digest: Box<dyn Digest>,}
编译失败,报错:
必须指定关联类型OutputSize
(来自特征digest::Digest
)的值
有时我可能想使用 sha2::Sha256 和其他时候 sha2::Sha512,每个都有不同的 OutputSize
。是否可以创建具有动态关联类型的盒装结构字段?如果是这样,如何?
解决方法
您可以创建自己的特征,并在所有返回 Digest
或 Box<[u8]>
而不是 Vec<u8>
的 GenericArray
实例中为其提供全面的实现,但您不需要因为 digest
的作者已经为您创建了 DynDigest
特征:
use digest::DynDigest;
struct Crypto {
digest: Box<dyn DynDigest>,}