rust - 如何传递已实现特定特征的结构实例?
问题描述
我正在尝试为通过引用将对象作为输入的方法编写正确的签名。假设该对象是实现某种特征的结构的实例。
impl MyStruct {
pub fn create_proof<E: Engine>(&self, C: &Circuit<E>, pk: &Parameters<E>) -> Proof<E> {
unimplemented!()
}
}
Circuit
被定义为这样的特征,trait Circuit<E: Engine>
并且它内部有一个已实现的方法。
当我编译项目时,我得到了错误:
the trait `mylib::Circuit` cannot be made into an object
note: method `circuit_method` has generic type parameters
为什么会发生此错误以及如何解决?我不允许修改mylib
与特征所在位置相关的所有Circuit
内容。我可以做的就是写出正确的签名。项目的整个代码太庞大太复杂,我不认为分享它是一个好主意。
解决方案
尝试使结构也实现Circuit
泛型类型:
pub fn create_proof<C, E>(&self, c: &C, pk: &Parameters<E>) -> Proof<E>
where
C: Circuit<E>,
E: Engine,
{
unimplemented!()
}
推荐阅读
- java - 如何在 webView 中向网站添加 CSS(填充)
- python - SQL Alchemy 使用 Or_ 循环多列(Pandas Dataframes)
- python - 由于 PyQt5.QtWebKitWidgets 无法启动 spyder
- postgresql-9.6 - 使用 Rails 5.1.6 查询 PostgresSQL(9.6.5) JSONb 列对于多个键值对
- docusignapi - Java 和 Docusign 集成
- java - 是否可以在不删除子字符串的情况下拆分它?
- java - com.ibm.ws.webcontainer.servlet.ServletWrapper java.lang.NoClassDefFoundError: org.apache.woden.resolver.URIResolver
- laravel - 更新整个表(Laravel 和 Vuejs)
- css - 如何从 Chrome 浏览器中找到 CSS
- c# - 调试命令行参数 Visual Studio 2017 中无法识别大于 (>) 符号