我有一些特征及其对某些结构的实现:
trait Named {
fn name(&self) -> String;
}
struct Americano;
impl Named for Americano {
fn name(&self) -> String { String::from("Caffè Americano") }
}
我也希望将这些结构存储在其他结构中:
struct Menu {
item: Box<Named>,
}
impl Menu {
pub fn new(item: Box<Named>) -> Self {
Menu { item: item }
}
}
这适用于我在main
函数中装箱结构的情况:
fn main() {
let s = Menu::new(Box::new(Americano));
}
我很好奇如何在Menu
的函数中移动拳击并使用类似的东西:
fn main() {
let s = Menu::new(Americano);
}
我尝试将new
实现为:
impl Menu {
pub fn new<T: Named>(b: T) -> Self {
Menu { item: Box::new(b) };
}
}
但我收到了错误
error: the parameter type `T` may not live long enough [--explain E0310]
--> <anon>:19:23
|>
19 |> Menu { item : Box::new(b) };
|> ^^^^^^^^^^^
help: consider adding an explicit lifetime bound `T: 'static`...
note: ...so that the type `T` will meet its required lifetime bounds
答案 0 :(得分:2)
在你的结构中:
<ul class="list-blog" style="list-style: none;">
<div class="row">
{% for article in blog.articles %}
<div class="col-xs-4 main-col">
<div class="content-blog">
<li class="myownstyleclass" style=" border: 2px solid #D3D3D3; padding-left:15px;">
<h3><a href="{{ article.url }}">{{ article.title }}</a></h3></li>
</div>
</div>
{% endfor %}
</div>
</ul>
struct Menu {
item: Box<Named>,
}
具有隐式lifetime bound,相当于Box<Named>
。因此,为了满足这些要求,传递给Box<Named + 'static>
的值也必须为Menu::set
。
'static
另一种选择是概括你的结构以接受任何生命周期限制。
impl Menu {
pub fn set<T: Named + 'static>(b: T) -> Self {
Menu { item: Box::new(b) }
}
}