gpt4 book ai didi

rust - 如何为不采用有效期参数的特征内的类型实现命名有效期?

转载 作者:行者123 更新时间:2023-12-03 11:45:02 25 4
gpt4 key购买 nike

我正在尝试为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
在不采用生命周期参数的Trait实现中,使用需要命名生命周期参数的Type的正确方法是什么?

最佳答案

如果将生存期放在实现类型(在您的情况下为SQL_Server_Manager)中,则会进行编译。必须将PhantomData放入其中以使用此生命周期,并避免另一个编译错误。
Playground

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
}

关于rust - 如何为不采用有效期参数的特征内的类型实现命名有效期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63329300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com