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

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

为什么会发生此错误,以及如何解决?我不允许修改绑定(bind)到mylibCircuit的所有内容。我被允许做所有正确的签名。该项目的整个代码过于庞大和棘手,我认为共享它不是一个好主意。

最佳答案

尝试将实现Circuit的结构也设为通用类型:

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

关于rust - 如何传递已实现某些特征的结构的实例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54307276/

10-10 19:24