首页 > 解决方案 > 如何使用嵌入式通用成员创建结构?

问题描述

我想使用将结构嵌入到较大结构中的leveldb板条箱,以便在代码中的不同位置使用:Database

我天真的方法是:

extern crate leveldb;
use leveldb::database::Database;

pub struct Model {
  db: Database,
}

但这会导致expected one type argument错误,所以我尝试按照编译器告诉我的操作并得出了这个结果,但它仍然失败:

extern crate leveldb;
extern crate db_key;

use leveldb::database::Database;
use db_key::Key;

pub struct Model<K>
{
    db: Database<K>,
}

现在看起来好像我需要以某种方式绑定K参数,但我不确定如何。我想我可以通过编写某种Model可以 pin的实例化器来解决这个问题K,但我不知道怎么做。

我设法做到了这一点:

pub struct Model<D> {
    db: D,
}

impl<D> Model<D> where D: {
    pub fn open(path: String) -> Model<D> {
        let path = Path::new("/tmp/test");
        let mut options = Options::new();
        options.create_if_missing = true;
        let database = match Database::open(path, options) {
            Ok(db) => { db },
            Err(e) => { panic!("failed to open database: {:?}", e) }
        };

        Model {
            db: database,
        }
    }
}

但现在 Rust 抱怨expected type parameter D, found struct model::leveldb::database::Database. 我原以为它会弄清楚那D是必然的Database,但事实似乎并非如此。

标签: genericsrust

解决方案


推荐阅读