我try 使用AES crate ,它提供三种算法:AES128、AES192和AES256.我正在try 创建一个 struct ,它可以通过检测密钥大小来创建正确的算法,并将其保存到以后使用.

我看到它们都实现了BlockEncrypt(我只需要加密)特性,但当我试图在 struct 中创建一个具有这种类型的字段时,即使提供了大小,我也会得到一个"特性BlockEncrypt无法生成对象.特性无法生成对象,因为它需要Self: Sized"错误.

pub struct MyStruct<'a, T: Sized> {
       ciph: Box< dyn BlockEncrypt<BlockSize = T>>,
}

推荐答案

正如@cdhowie所提到的,你不能从一个绑定为Sized的特征中创建一个特征对象.相反,您可以创建一个枚举:

enum My算法rithm {
    AES128(AES128),
    AES192(AES192),
    AES256(AES256),
}

Rust相关问答推荐

如何优化小型固定大小数组中的搜索?

当rust中不存在文件或目录时,std::FS::File::Create().unwire()会抛出错误

为什么BitVec缺少Serialize trait?

关于如何初始化弱 struct 字段的语法问题

通过不同的字段进行散列和排序的 struct (需要不同的EQ实现)

在本例中,为什么我不能一次多次borrow 可变变量?

Rust 的多态现象.AsRef与Derf

在铁 rust 中,如何一次只引用几件事中的一件?

rust中的库插件管理器,现在是否可行?

在运行特定测试时,如何 suppress cargo test 的空输出?

如何限制 GtkColumnView 行数

为什么我的trait 对象类型不匹配?

当锁被释放时,将锁包装到作用域中是否会发生变化?

(let b = MyBox(5 as *const u8); &b; ) 和 (let b = &MyBox(5 as *const u8); ) 之间有什么区别

按下 Ctrl + C 时优雅地停止命令并退出进程

为什么要这样编译?

无法把握借来的价值不够长寿,请解释

预期类型参数,发现不透明类型

如何创建动态创建值并向它们返回borrow 的工厂?

为什么 `ref` 会导致此示例*取消引用*一个字段?