Привязки Rust Pyo3: как повторно использовать методы python для общих типов rust
У меня проблема немного посложнее. Но я думаю, что это ломает его. У меня есть общая структура, в которой есть три конструктора для получения конкретной типизированной структуры. Все они имеют одни и те же общие методы, за исключением конструкторов. Я хочу примерно следующее:
use pyo3::prelude::*;
#[pyclass]
struct AnyVec<T> {
vec_: Vec<T>,
}
// General methods which
#[pymethods]
impl<T> AnyVec<T> {
fn push(&mut self, v: T) {
self.vec_.push(v)
}
fn pop(&mut self, v: T) -> T {
self.vec_.pop()
}
}
#[pymethods]
impl AnyVec<String> {
#[new]
fn new() -> Self {
AnyVec { vec_: vec![] }
}
}
#[pymethods]
impl AnyVec<f32> {
#[new]
fn new() -> Self {
AnyVec { vec_: vec![] }
}
}
Когда я пытаюсь это скомпилировать. pyo3
предупреждает меня, что он не может использовать дженерики. error: #[pyclass] cannot have generic parameters
.
Можно ли создать какую-то общую базу class
от которых наследуются конкретные типы?.
Для завершения; вот мойCargo.toml
:
[package]
name = "example"
edition = "2018"
[dependencies]
pyo3 = { version="0.9.0-alpha.1", features = ["extension-module"] }
[lib]
name = "example"
crate-type = ["cdylib"]