Я создаю библиотеку Rust, которая должна вызывать некоторые функции C с объектами Rust. У меня есть черта с функцией, которая вызывает функцию C, функция C определена в Rust следующим образом:
extern {
fn process_trait(my_trait: MyTrait);
}
Идея состоит в том, что пользователь может реализовать трейт для своей структуры, а затем вызвать функции C (в основном, C затем вызывает обратно какой-то другой Rust, который вызывает некоторые функции Trait). Ошибка здесь: the trait core::marker::Sized is not implemented for the type Self
, потому что я передаю *self
в process_trait. Я делаю что-то неправильно? Я попытался немного изменить это, даже при кастинге, я получаю либо эту ошибку, либо неправильный тип.
Я думаю, проблема в том, что это должна быть куча, не так ли? Единственное, чего я пытаюсь избежать, так это уродливого вида API. Пользователь должен просто уметь
struct MyUnit;
impl MyTrait for MyUnit...
MyUnit.callC();