无法为生命周期推断合适的生命周期

时间:2021-07-04 20:34:07

标签: rust

我有这样的事情:

type G2d<'a> = GfxGraphics<'a, Resources, CommandBuffer>;

如何将其作为字段包含在结构中?

pub struct Dc
{
  g : G2d,
  c : Context,
}

但它给出了:

expected named lifetime parameter

我试过了:


pub struct Dc
{
  g : &'a mut G2d<'a>,
  c : Context,
}

window.draw_2d( &event, | c, g, device |
{
  let mut dc = Dc { c, g };
});

但它给出了:

image|690x385

我将不胜感激。

2 个答案:

答案 0 :(得分:1)

整个结构应该用生命周期注释:

pub struct Dc<'a>
{
  g : G2d<'a>,
  c : Context,
}

答案 1 :(得分:0)

正确的解决方法是

pub struct Dc<'a, 'b>
{
  g : &'a mut G2d<'b>,
  c : Context,
}

在 G2d<'a> 内部创建引用的同时创建外部 &mut 借用在逻辑上是不正确的。因此,在表达式 &'a mut G2d<'a> 中,这两个 'a 生命周期不可能意味着它们借用了相同的东西。正确的解决方案是使用多个生命周期。