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

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

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

这无法编译并出现错误:

必须指定关联类型的值OutputSize(来自 trait digest::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>,
}


以上是如何为Box&lt;dynTrait&gt;字段指定关联类型的值?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>