如何为Box<dynTrait>字段指定关联类型的值?
我想为特征创建一个盒装结构字段,其中特征具有关联类型。下面是一个使用digest::Digest的例子:
use digest::Digest;
struct Crypto {
digest: Box<dyn Digest>,
}
这无法编译并出现错误:
必须指定关联类型的值
OutputSize(来自 traitdigest::Digest)
有时我可能想使用sha2 ::Sha256 有时使用 sha2::Sha512,每个都有不同的OutputSize. 是否可以创建具有动态关联类型的盒装结构字段?如果是这样,如何?
回答
您可以创建自己的 trait 并在所有Digest返回Box<[u8]>或Vec<u8>代替 的实例中为其提供一个全面的实现GenericArray,但您不需要这样做,因为 的作者digest已经DynDigest为您创建了一个trait:
use digest::DynDigest;
struct Crypto {
digest: Box<dyn DynDigest>,
}