我正在尝试为SQL Server实现r2d2::ManageConnection特征。我遇到的问题是,我想要用于实现的连接结构需要生命周期参数,但我不知道如何指定生命周期。
添加命名生存期会产生预期的错误。
impl r2d2::ManageConnection for SQL_Server_Manager{
type Connection = odbc::Connection<'a, AutocommitOn>;
type Connection = odbc::Connection<'a, AutocommitOn>;
^^ undeclared lifetime尝试使用未命名的生存期也会抛出错误
type Connection = odbc::Connection<'_, AutocommitOn>;
^^ expected named lifetime parameter尝试向特征添加一个命名的生命周期参数会抛出一个错误
impl<'a> r2d2::ManageConnection<'a> for SQL_Server_Manager{
^^ unexpected lifetime argument在不接受生命周期参数的特征实现中,使用需要命名生命周期参数的类型的正确方法是什么?
发布于 2020-08-10 02:00:42
如果您在实现者类型(在本例中为SQL_Server_Manager)中设置了生命周期,它就会进行编译。我不得不在里面放一个PhantomData来使用这个生命周期,并避免另一个编译错误。
struct Foo<'a> {
val: &'a str,
}
#[derive(Default)]
struct Bar<'a> {
pd: std::marker::PhantomData<&'a u32>,
}
trait Trait {
type Connection;
fn fun(&self, con: Self::Connection);
}
impl<'a> Trait for Bar<'a> {
type Connection = Foo<'a>;
fn fun(&self, con: Self::Connection) {
println!("Implemented {}", con.val);
}
}
fn main() {
let b = Bar::default();
b.fun(Foo{ val:"FOO" }); // Implemented FOO
}https://stackoverflow.com/questions/63329300
复制相似问题