编辑:问题是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
>
该错误表示我必须为通用对象指定生存期,但是,我已经为我的类型指定了特征。因此,最终,如何指定泛型既遵循特征又具有生存期?
答案 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>
}
添加它们。即+