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

问题描述

我想为一个特征创建一个装箱结构字段,其中特征具有关联的类型。下面是一个使用 digest::Digest 的示例:

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

编译失败,报错:

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

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

解决方法

您可以创建自己的特征,并在所有返回 DigestBox<[u8]> 而不是 Vec<u8>GenericArray 实例中为其提供全面的实现,但您不需要因为 digest 的作者已经为您创建了 DynDigest 特征:

use digest::DynDigest;

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...