generics - 如何使用嵌入式通用成员创建结构?
问题描述
我想使用将结构嵌入到较大结构中的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
,但事实似乎并非如此。
解决方案
推荐阅读
- android - Retrofit PUT Multipart 在 Android 中上传后追加文本文件
- javascript - 如果未对表单进行任何更改,则禁用提交按钮
- java - System.getenv(/**vName**/) & Auto-wiring Environment 和做 environment.getProperty("myProp"); 的区别
- python - 使用 GridsearchCV 调整参数没有给出最佳结果
- c++ - 应用于无符号类型的一元减运算符
- java - 如何使用 java api 在 kafka 主题上设置 ACL?
- c# - C# Skype Bot 下载附件
- vaadin - 这段代码有什么问题?它抛出空错误
- r - 在 R 中使用访问器“[”时,在数据帧上使用时的默认行为是什么?
- go - 为什么我在 go lang 的类型断言上得到奇怪的结果?