Syntax 如何在关联类型中指定生存期?

Syntax 如何在关联类型中指定生存期?,syntax,rust,traits,lifetime,associated-types,Syntax,Rust,Traits,Lifetime,Associated Types,我试图让每个GraphicsContext实现返回着色器的不同实现 发布特性资源{ 类型着色器:着色器::着色器; } pub-GraphicsContext{ 类型资源:资源; ///创建着色器对象 fn创建_着色器结果; ///创建着色器程序对象 fn创建\u着色器\u程序结果; 或许: fn使用着色器(上下文:&GraphicsContext, 着色器:??**T::着色器**??) 其中T:GraphicsContext::Resources->Result; 像这样的事情可能吗?希

我试图让每个
GraphicsContext
实现返回
着色器的不同实现

发布特性资源{
类型着色器:着色器::着色器;
}
pub-GraphicsContext{
类型资源:资源;
///创建着色器对象
fn创建_着色器结果;
///创建着色器程序对象
fn创建\u着色器\u程序结果;
或许:

fn使用着色器(上下文:&GraphicsContext,
着色器:??**T::着色器**??)
其中T:GraphicsContext::Resources->Result;
像这样的事情可能吗?希望你能看到我有点理解基本的泛型(我来自Java),但这让我发疯(它确实感觉很粗糙)

如果这是正确的方法,那么我的实现就会出现问题。
rustc
希望关联的类型具有指定的生存期

生存期参数数量错误:应为1,找到0[E0107]
opal_driver_gl/src/context.rs:23 type Shader=Shader;
我的
OpenGLShader
struct实际上是类型
OpenGLShader(&'a self,stage:core\u shader::stage,source:&str)
->结果{
//impl在这里
}
}
我尝试将生存期附加到
OpenGLResources
OpenGLGraphicsContext
,这解决了错误,但随后说
error:parameter'a从未使用过

因此,其次,我问如何在我的关联类型中包含生命


非常感谢,如果你能看看这个。我觉得这样的东西在编译时一定可以检查,但我对Rust还很陌生,所以我不能很好地探索如何实现它。

我最终切换到泛型,它提供了一个成功的实现


给定
资源,请将问题一分为二。目前,它包含两个关系不大的问题,第一个问题可能不适合Stackoverflow。对于第二个问题,它需要关联的类型具有生存期参数:
type Shader
。这一特征被称为更高级的类型,但在Rust中尚不可用。由于上述评论中的原因,我现在写这篇文章不是为了回答。@VladimirMatveev我曾考虑只问第一个问题,但后来我认为如果我的“抽象”想法有缺陷,第二个问题无关紧要,所以我将其包括在内。至于第二条评论,听起来好像我在试图实现不可能的目标。但是,我可以将
OpenGLGraphicsContext
转换为
OpenGLGraphicsContext
,然后编写
type Shader=openglshaderies,我认为您可以,因为您的trait中的方法不使用
'a
。您只需要小心处理
OpenGLGraphicsContext
本身的生命周期,您可能需要使用。不过,一般来说,这是不可能做到的。
trait GraphicsContext<'a, R: Resources<'a>>
                             // replaced here
impl<'a> GraphicsContext<'a, OpenGLResources<'a>> for OpenGLGraphicsContext<'a> {

    fn create_shader(&'a self, ty: Type, source: &str) -> Result<Shader<'a>, ShaderCreationError> {
        // do something
    }

}