是否可以使用泛型的结构定义,其中类型既是特征类型又具有生存期?

时间:2018-11-06 22:49:03

标签: rust

编辑:问题是Shepmaster修改的标题。添加了更多详细信息。

我想访问一个对象,该对象遵循不同线程中的特征,这些特征总体上存储在结构中。当我从另一种语言移植代码以尝试学习生锈时,我还是该语言的新手。

最初,我认为具有类似于以下内容的结构,该结构可以很好地编译:

struct MyStruct<T : MyTrait> {
    my_object : Arc<Mutex<T>>
}

但是,最终我需要存储对其的引用,因为它将存储在多个线程中。我知道我还需要使用生命周期才能使它正常工作,所以我得出以下结论:

struct MyStruct<'a, T : MyTrait> {
    my_object : &' Arc<Mutex<T>>
}

我得到的错误是:

  

错误[E0309]:参数类型T的寿命可能不够长

     

-帮助:考虑添加一个明确的生命周期约束T: 'a ...

     

...以便引用类型&'a std::sync::Arc<std::sync::Mutex<T>>不会超过其指向的数据

     

my_object:&'Arc >

该错误表示我必须为通用对象指定生存期,但是,我已经为我的类型指定了特征。因此,最终,如何指定泛型既遵循特征又具有生存期?

1 个答案:

答案 0 :(得分:3)

  

最终,如何指定泛型既具有特征又具有生存期?

使用相同的方法指定多个特征:用 @using Microsoft.AspNetCore.Identity @inject SignInManager<ApplicationUser> SignInManager @inject UserManager<ApplicationUser> UserManager @if (SignInManager.IsSignedIn(User)) { <form asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Action("Index", "Home", new { area = "" })" method="post" id="logoutForm" class="navbar-right"> <ul class="nav navbar-nav navbar-right"> <li> <a asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">Hello @UserManager.GetUserName(User)!</a> </li> <li> <button type="submit" class="btn btn-link navbar-btn navbar-link">Logout</button> </li> </ul> </form> } else { <ul class="nav navbar-nav navbar-right"> <li><a asp-area="Identity" asp-page="/Account/Register">Register</a></li> <li><a asp-area="Identity" asp-page="/Account/Login">Login</a></li> </ul> } 添加它们。即+