【问题标题】:How to solve this rust lifetime bound issue of SDL2? [duplicate]如何解决 SDL2 的生锈寿命限制问题? [复制]
【发布时间】:2018-04-10 06:43:32
【问题描述】:

我正在尝试使用 sdl2 ttf 渲染一些字体。 sdl2 中的 Font 类型对使用 PhantomData 的上下文具有生命周期依赖关系。我觉得很难用。这是我尝试使用的最小代码。

main.rs

extern crate sdl2;

use sdl2::ttf::{self, Font};
use sdl2::ttf::Sdl2TtfContext;

struct App<'ttf> {
    ctx: Sdl2TtfContext,
    glyph_renderer: GlyphRenderer<'ttf>,
}

impl<'ttf> App<'ttf> {
    fn render(&self) {}
}

struct GlyphRenderer<'ttf> {
    font: Font<'ttf, 'static>,
}

fn main() {
    let ttf_context = ttf::init().unwrap();

    let font = ttf_context.load_font("./assets/Supermercado-Regular.ttf", 50).unwrap();
    let glyph_renderer = GlyphRenderer { font };

    let app = App {
        ctx: ttf_context,
        glyph_renderer,
    };

    app.render();
}

Cargo.toml

[package]
name = "demo-rust"
version = "0.1.0"
authors = ["clojure"]

[dependencies.sdl2]
version = "0.31.0"
default-features = false
features = ["ttf"]
  1. ttf_context 已移动。我可以解决这个问题,但要以丑陋的方式更改代码。
  2. 字体在上下文中具有生命周期限制。无法修复此问题。

本文档包含Sdl2TtfContextFont 的声明,如果您觉得它有用的话。 DOC

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及重现它所需的最短代码在问题本身。没有清晰的问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example
  • 蒂姆,我更新了代码。现在它包含一个最短的代码示例。
  • 能否添加错误输出?

标签: rust sdl-2


【解决方案1】:

好的,我可以通过将上下文创建移到外部范围来解决此问题。它不能放在结构上。

fn start(ttf_context: &Sdl2TtfContext) {
    let font = ttf_context.load_font("./assets/Supermercado-Regular.ttf", 50).unwrap();
    let glyph_renderer = GlyphRenderer { font };

    let app = App {
        glyph_renderer,
    };

    app.render();
}

fn main() {
    let ttf_context = ttf::init().unwrap();
    start(&ttf_context);
}

【讨论】:

    猜你喜欢
    • 2019-04-27
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 2019-10-13
    相关资源
    最近更新 更多