【发布时间】:2015-06-21 03:22:04
【问题描述】:
我正在努力解决这个错误 rustc 给我:
error: method `create_shader_explicit` has an incompatible type for trait: expected bound lifetime parameter 'a, found concrete lifetime
我的特质声明几乎是这样的:
pub trait GraphicsContext<R: Resources> {
/// Creates a shader object
fn create_shader<'a>(&'a self, shader::Stage, source: &str) ->
Result<handle::Shader<R>, shader::CreateError>;
}
这是我的实现,
pub struct OpenGLResources<'a> {
phantom: PhantomData<&'a u32>
}
impl<'a> Resources for OpenGLResources<'a> {
type Shader = Shader<'a>;
}
impl<'z> GraphicsContext<OpenGLResources<'z>> for OpenGLGraphicsContext {
/// Creates a shader object
fn create_shader<'a>(&'a self, stage: shader::Stage, source: &str) ->
Result<handle::Shader<OpenGLResources>, shader::CreateError> {
let shader = Shader::new(self, stage);
try!(shader.compile_from_source(source));
Ok(shader)
}
}
在 StackOverflow 上的 other questions 中,它们在 create_shader 和 () 之间缺少诸如 <'a> 之类的东西,但是当我比较我的 fn 定义时,它们看起来是相同的。
编辑:
将impl 中的定义更改为以下问题的修复
fn create_shader<'a>(&'a self, stage: shader::Stage, source: &str) ->
Result<handle::Shader<OpenGLResources**<'z>**>, shader::CreateError>
但问题是'a 和'z 需要具有相同的生命周期。如果我把它改成这样:
fn create_shader(**&'z** self, stage: shader::Stage, source: &str) ->
Result<handle::Shader<OpenGLResources<'z>>, shader::CreateError>
impl 块有效,但我需要一种在特征定义中指定 'z 生命周期的方法。我尝试了以下方法:
pub trait<'z> GraphicsContext<R: Resources<'z>>
但它没有用。
【问题讨论】: