首页 > 解决方案 > 如何传递已实现特定特征的结构实例?

问题描述

我正在尝试为通过引用将对象作为输入的方法编写正确的签名。假设该对象是实现某种特征的结构的实例。

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内容。我可以做的就是写出正确的签名。项目的整个代码太庞大太复杂,我不认为分享它是一个好主意。

标签: rust

解决方案


尝试使结构也实现Circuit泛型类型:

pub fn create_proof<C, E>(&self, c: &C, pk: &Parameters<E>) -> Proof<E>
where
    C: Circuit<E>,
    E: Engine,
{
    unimplemented!()
}

推荐阅读