Как передать экземпляр структуры, в которой реализована определенная черта? - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь написать правильную подпись для метода, который принимает объект по ссылке в качестве входного.Предполагается, что объект является экземпляром структуры, которая реализует определенную черту.

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.Все, что мне разрешено делать, чтобы написать правильную подпись.Весь код проекта слишком большой и хитрый, я не думаю, что это хорошая идея, чтобы поделиться им.

1 Ответ

0 голосов
/ 22 января 2019

Попробуйте также сделать структуру, которая реализует Circuit универсальный тип:

pub fn create_proof<C, E>(&self, c: &C, pk: &Parameters<E>) -> Proof<E>
where
    C: Circuit<E>,
    E: Engine,
{
    unimplemented!()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...