Привязки к ржавчине Pyo3: как повторно использовать python методы для типов Generi c ржавчины - PullRequest
0 голосов
/ 12 марта 2020

У меня проблема немного сложнее, чем эта. Но я думаю, что это ломает это. У меня есть какая-то общая структура c, в которой есть три конструктора для получения конкретной типизированной структуры. Все они имеют одинаковые обобщенные методы c, за исключением конструкторов. Я хочу что-то вроде этого:

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.

Можно ли создать какой-то род c base 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"]
...